考慮下面的C++代碼:總結布爾值/ C++
bool a = 5;
bool b = 6;
int c = (int)a + (int)b;
當我編譯&運行該代碼,c具有值2是否標準保證的是,在任何編譯器/平臺,布爾使用false(0)或true(不一定爲1)初始化的值在操作中將爲1,並且上面的代碼總是會導致c爲2?
而在C99,包括stdbool.h,是仍然有效?
考慮下面的C++代碼:總結布爾值/ C++
bool a = 5;
bool b = 6;
int c = (int)a + (int)b;
當我編譯&運行該代碼,c具有值2是否標準保證的是,在任何編譯器/平臺,布爾使用false(0)或true(不一定爲1)初始化的值在操作中將爲1,並且上面的代碼總是會導致c爲2?
而在C99,包括stdbool.h,是仍然有效?
C++標準的4.7節(整數版本)表示:
如果源類型是布爾,值假被轉換爲 零和值真被轉換爲一。
4.9節使浮點轉換相同的質量保證。
謝謝,C++的這個答案,但是對C99(與stdbool)也是有效的嗎? – fbafelipe
對於編譯器,規則往往是假的爲0,任何東西都不會是真實的。但是,像這樣處理bool是一個整數類型通常被認爲是不好的形式。然而,標準包含一個轉換爲int的規則,並且只要編譯器符合標準,假設是正確的false = 0和true = 1!
在任何情況下,爲什麼算術與布爾類型?
希望這有助於
依據標準:
true
轉換爲1false
轉換爲0他投來int
是沒有必要的轉換到int
是隱含的。
David Schwartz已經爲C++回答了。對於C99標準,我們有6.3.1.4:
當任何標量值轉換爲_Bool,結果是0,如果 值進行比較等於0;否則,結果爲1
由於標準的6.3.1.1也清楚地表明,_Bool受到整型的提升很明顯,一個_Bool永遠是0或1
我想你答案就在這裏:http://stackoverflow.com/questions/2725044/can-i-assume-booltrue-int1-for-any-c-compiler –
IMO,如果分配不是真正的以外的東西/假的布爾變量它應該代碼審查回你。 – Max
我只有一個詞:爲什麼? –