Что происходит с полукруглым кругом, брошенным через бул? - PullRequest
7 голосов
/ 31 января 2012

Что дает определение языка C ++ при приведении char к bool, а затем обратно к char снова?

char original = 255;
bool next = original;
char final = next;

Кроме того, что делает в этом случае большинство компиляторов помимо того, что гарантирует язык?

Ответы [ 3 ]

14 голосов
/ 31 января 2012

Это даст нулевое или единичное значение, в зависимости от того, было ли исходное значение нулевым или ненулевым.

Преобразование в bool дает значение true или false:

4.12 Нулевое значение, значение нулевого указателя или значение указателя нулевого элемента преобразуется в false;любое другое значение преобразуется в true.

Преобразование обратно в char преобразует false в ноль и true в единицу:

4.7 /4 Если тип источника bool, значение false преобразуется в ноль, а значение true преобразуется в единицу.

3 голосов
/ 31 января 2012

Интегральные значения, преобразованные в bool, дают либо true или false (4.12), а bool, преобразованные в целочисленные значения, приводят либо к 1, либо 0 (4.5 (6)).См. Главу 4 (Стандартные преобразования).

2 голосов
/ 31 января 2012

При преобразовании в bool ноль и ноль преобразуются в false, а все остальное преобразуется в true. При преобразовании из bool значение false преобразуется в ноль, а значение true преобразуется в единицу.

...