C++ setzt bool
Werte automatisch auf true
oder false
, auch wenn der Typ tatsächlich einen 1 Byte Wert enthält.Verwendung von reinterpret_cast mit bool
So bool(123) == true
ist wahr, mit
int i = 123;
bool b = i;
int j = b;
j
1
den Wert nimmt.
Aber ist dies der Fall bleiben, wenn reinterpret_cast
mit bool*
Zeiger verwendet wird? Z.B.
static_assert(sizeof(bool) == 1, "assuming sizeof(bool) is one in this example...");
std::uint8_t i = 123;
bool* b = reinterpret_cast<bool*>(&i);
int j = *b; // j becomes 1
if(*b == true) ... // condition is true
Sind diese Ergebnisse garantiert wahr zu sein, oder ist es nicht definiertes Verhalten. (d. h. kann kompiliert werden unter der Annahme, dass bool
Objekte bereits intern als 1
und 0
dargestellt sind).
_ "Sind diese Ergebnisse garantiert, oder ist es ein undefiniertes Verhalten?" _ Nun, die Verwendung von 'reininterpret_cast' ist eher ein nicht spezifiziertes Verhalten_. –
Woher bekommst du, dass die Größe von Bool 1 sein muss? – NathanOliver
@NathanOliver Ist das nicht die kleinste Größe, die für einen Datentyp ausgewählt werden könnte? –