bool flag = true;
bool empty = false;
// true/false 是關鍵字,非巨集
// sizeof(bool) == 1 (通常)
bool 屬於**整數類型**,在需要算術值的語境會**隱式提升為 int**:
false → 0true → 1bool b = true;
int i = 5;
cout << i + b; // 輸出 6 (b 提升為 1)
cout << b * 10; // 輸出 10
signed/unsigned/short/long 修飾short bool b; // 編譯錯誤:bool 是獨立基礎型別
任何**標量**(指標、算術型別、列舉、成員指標)在**布爾語境**隱式轉換為 bool:
nullptr → falsetrueint *p = nullptr;
if (p) { /* 不會執行 */ } // p 隱式轉 false
int x = 42;
if (x) { /* 執行 */ } // x 非零 → true
// 經典慣用語:檢查指標有效性
void foo(Widget *w) {
if (!w) return; // 等價 if (w == nullptr)
w->doSomething();
}
cout << true << ' ' << false; // 輸出: 1 0
cout << std::boolalpha << true << ' ' << false; // 輸出: true false
// 好:簡潔慣用
if (ptr) { }
if (container.empty()) { }
if (error_code) { }
// 避免:冗餘比較
if (ptr != nullptr) { }
if (container.empty() == true) { }
if (error_code != 0) { }
// 危險:隱式轉換可能掩蓋邏輯錯誤
void setFlag(int value) { flag = value; } // value=42 → flag=true,無警告
// 更好:強型別或明確比較
void setFlag(bool value) { flag = value; }
void setFlag(int value) { flag = (value != 0); } // 明確語意
// 差:呼叫端不明語意
window.show(true, false, true);
// 好:用枚舉或具名參數模式
enum class Visibility { Show, Hide };
enum class Focus { Take, Keep };
window.show(Visibility::Show, Focus::Keep);
sizeof(bool) >= 1,實際通常為 1 byte。0 為 false,非零為 true(但存儲時通常規範化為 0/1)。_Bool 是 C99 關鍵字,C++ 以 bool 為標準名稱(<cstdbool> 定義 bool 為 _Bool 別名)。bool 是獨立基礎型別,**不可**用整數修飾符修飾。int (false=0, true=1);布爾語境標量隱式轉換 (0/nullptr→false, 非零→true)。std::boolalpha 獲得可讀性更好的 true/false 文本。