2010年9月29日 星期三

為什麼使用 BOOL 而非 bool

這是我剛接觸用 C++/MFC 開發時看到的第一個疑惑,
在 platform SDK/include/windef.h 裡面有一行這樣的定義


typedef int BOOL;


BOOL 這個型態其實就是整數,而 bool 是 C++ 的 built-in type,
bool 的 size 是 1 個 bit,而 BOOL 是 4 個B ytes,大小差了 32 倍,
以前總覺得撰寫程序時使用的變數愈小,速度就可以愈快,
但看了前輩寫的 code 卻常常出現類似這樣子的 code


UINT unLoginStatus = (CUserStatus::GetInstance())->GetLoginStatus();
BOOL bIsValidUser = unLoginStatus >= (UINT)CUserStatus::UT_FREEUSER;


令當時的我疑惑為什麼到處都要使用 BOOL 而不使用較小的 bool 呢?

後來一位前輩告訴我,目前 CPU 普遍都是 32 位元,意指有 32 條位元線,
而 CPU 在要資料時每次會要 32 位元的資料,若資料未滿 32 位元,就會用 0 補齊,
而 C++ 的整數型態 size 是 4 個位元組,即是 32 位元,正好可以直接餵給 CPU
而 1 個位元的 bool 雖然小,但必須經過補 31 個 0 的動作才能餵給 CPU
如此我們不旦沒有省下空間,還浪費了時間,
所以很自然的在 C++ 上使用 int(BOOL) 來當作布林判斷是個不錯的選擇。

但是前輩又說,現在的 Compiler 都很聰明,即便你的 code 是寫 bool
在做編譯時,Comipler 也會自動幫你置換成 BOOL
所以到底用 BOOL 和 bool 就變得不是那麼重要了,
養成寫 BOOL 的習慣僅是提醒自己這背後的原理而已。

沒有留言:

張貼留言