bool 是 C++ 關鍵字,僅有兩個字面值:true(真)、false(假)。用於邏輯判斷、條件控制,語義清晰。
標準規定:bool 屬於整數類型,但不可加 signed/unsigned/short/long 修飾。
在需要算術值的語境(算術運算、陣列索引、switch case 等),bool 會**隱式轉換為 int**:
false → 0true → 1bool found = true;
int a = 1;
cout << a + found << endl; // 輸出 2,found 隱式轉為 1 參與加法
任何指標在條件判斷(if、while、for、?)中會隱式轉為 bool:
nullptr/NULL/0)→ falsetrueint a = 1;
int* pi = &a;
if (*pi) { // *pi 為 1(非零)→ true
cout << "*pi 為真" << endl;
}
| 情境 | 建議寫法 | 避免寫法 | 理由 |
|---|---|---|---|
| 檢查指標是否有效 | if (ptr) / if (!ptr) | if (ptr == NULL) / if (ptr != nullptr) | 簡潔、符合慣用語、C++11 起 nullptr 更安全 |
| 檢查整數是否非零 | if (count) | if (count != 0) | 同樣簡潔,但團隊風格可能要求顯式比較 |
| 布爾變數命名 | isValid, hasError, canProceed | flag, status, check | 語義自明,讀如英文句子 |
| 函式回傳布爾 | bool try_parse(...) | int try_parse(...) 回傳 0/1 | 型別語義約束呼叫端邏輯 |
_Bool 與 <stdbool.h> 定義 bool/true/false,但本質仍為無號整數,隱式轉換規則相同。bool 是獨立基本類型,支援多載解析區分(void f(int) vs void f(bool))。bool 雖語義為邏輯真偽,但本質屬整數家族,隱式轉換規則統一為 false=0, true=1。善用此特性可寫出簡潔慣用的條件判斷,但需避免濫用算術運算導致語義混淆。現代 C++ 推薦搭配 nullptr、std::optional、std::expected 表達更豐富的狀態語義。