C/C++ 中 bool 相比於 char 有什麼優勢?為什麼要設立 bool 類型?
01-06
《C++語言的設計與演化》,第 11.7.2 節。
簡言之,如果標準不定義bool,程序員就會自己typedef,那麼有的會用char,有的會用unsigned int,有的會用signed int,那就頭大了。
類型名可以是 BOOL/Bool/bool/BOOLEAN/Boolean/boolean 之一;還有同時定義 BOOL 和 BOOLEAN,且類型不同的。
同理,如果語言不定義 true false 關鍵字,有的程序員會define TRUE / FALSE,有的會 define True / False,有的會 define true / false,TRUE 可以是 1 也可以是 -1 ……C++ 編譯器認為,bool 的實際類型一般是 unsigned char,但是:
bool b1 = some_bool_func1(..);
bool b2 = some_bool_func2(..);
if (b1 == b2) {...} else {...};
這裡面的 if (b1 == b2) 實際上會被編譯成 if (0 == b1 0 == b2 || 0 != b1 0 != b2)
因為,雖然 bool 的法定值是 0 和 1,但實際上 bool 代表的是 0 和 非0,從不可靠來源得到的 bool 值可能是 0~255 中間的任意值
char當bool有什麼不好呢?的確有。比如arm單片機編程,用int當bool,一個寄存器直接就行了。用char的話,需要取得1/4個寄存器,為了判斷bool的值,編譯器就需要加入不少代碼,取寄存器的若干位。增加代碼大小,減少運行速度,沒有得到任何好處。
C 有類型檢查,C的bool就是用宏替換的int沒有類型檢查
語義約束。
C programming language 不在手邊,懶得重新連接代理,說錯了別要怪我
我記得C中沒有bool,是部分編輯器使用 typedef將boolean定義成了 int
Using boolean values in C別的不知道,首先你不應當拿bool和char比,bool在很多平台都是32位的。=================記錯了!只有glib里的是32位的
typedef gint gboolean;
主要是類型統一,這個其他同學都有講到。還有一個就是便於編譯器優化。
Exception C++上有個Item就講到如何正確實現bug free的bool類型 可以參考
推薦閱讀:
※二級C習題10.10為什麼選C?
※有必要在寫 C++ 時避免隱式轉換嗎?
※C++中如何載入100K+的常數數組?
※C++自學用書推薦?
※自學計算機圖形學要哪些基礎?只用c語言可以嗎?