Что дает определение языка C ++ при приведении char к bool, а затем обратно к char снова?
char original = 255; bool next = original; char final = next;
Кроме того, что делает в этом случае большинство компиляторов помимо того, что гарантирует язык?
Это даст нулевое или единичное значение, в зависимости от того, было ли исходное значение нулевым или ненулевым.
Преобразование в bool дает значение true или false:
bool
true
false
4.12 Нулевое значение, значение нулевого указателя или значение указателя нулевого элемента преобразуется в false;любое другое значение преобразуется в true.
Преобразование обратно в char преобразует false в ноль и true в единицу:
char
4.7 /4 Если тип источника bool, значение false преобразуется в ноль, а значение true преобразуется в единицу.
Интегральные значения, преобразованные в bool, дают либо true или false (4.12), а bool, преобразованные в целочисленные значения, приводят либо к 1, либо 0 (4.5 (6)).См. Главу 4 (Стандартные преобразования).
1
0
При преобразовании в bool ноль и ноль преобразуются в false, а все остальное преобразуется в true. При преобразовании из bool значение false преобразуется в ноль, а значение true преобразуется в единицу.