今天,我才意識到,鑄造值的布爾是一種魔力:魔術爲bool
int value = 0x100;
unsigned char uc = static_cast<unsigned char>(value);
bool b = static_cast<bool>(value);
兩個sizeof(uc)
和sizeof(b)
回報1
。我知道uc
將包含0x00,因爲只有LSB被複制。但b
將是true
,所以我的假設是,當投射到bool
時,值將被評估而不是被複制。
這個假設是否正確?這是一個標準的C++行爲?
這是黑暗的藝術之一。 –
一切都不是'0'是真的,因爲'0x100'不是'0'... – PlasmaHH
我敢肯定這是一個其他SO問題,但無論如何,從C + + 03:「右值算術,枚舉,指針或指向成員類型的指針可以轉換爲bool類型的右值,零值,空指針值或空成員指針值被轉換爲false;任何其他值被轉換爲true。 –