名稱空間
變體
操作

C++ 命名要求: BooleanTestable

來自 cppreference.com
 
 
C++ 命名要求
基本
型別屬性
全庫範圍
BooleanTestable(可布林測試)




Container(容器)
容器元素
迭代器 (Iterator)
流 I/O
格式化器
(C++20)
隨機數
併發
(C++11)
Ranges
多維檢視
其他

 

指定此類型別和值類別的表示式可轉換為 bool,並且該型別或兩種不同的 BooleanTestable 型別上的邏輯運算子具有通常行為(包括短路求值)。

目錄

[編輯] 要求

e 為某種型別和值類別的表示式。如果滿足以下條件,則該型別和值類別符合 BooleanTestable 要求:

  • !e 格式良好,且不修改由 e 表示的物件(如果有),除非 e 是 xvalue,否則所表示的物件可以處於有效但未指定的狀態(C++11 起)
  • e!e 都可以透過隱式轉換static_cast 轉換為 bool
  • 兩種轉換方式都產生相等的結果,並且不修改源物件(如果有),除非 e!e 是 xvalue,否則源物件可以處於有效但未指定的狀態(C++11 起)
  • 滿足 bool(!e) == !bool(e)
  • 對於 e!e 的型別,透過依賴於引數的查詢,沒有可見的可用非成員 operator&&operator||
  • 如果 e!e 是類型別,則該類不定義任何成員 operator&&operator||

[編輯] 注意

標準沒有定義具有此名稱的命名要求。它最初是在 LWG2114 的早期解決方案中提出的,但在最終解決方案 P2167R3 中被替換為僅用於闡述的概念 boolean-testable。由於即使在 C++20 之前的模式下,實現通常也期望所提供的型別能夠建模 boolean-testable,因此我們有意將 P2167R3 視為缺陷報告,並將 boolean-testable 轉換為遺留的命名要求。

&&|| 運算子與型別和值類別為 BooleanTestable 的運算元一起使用時,將選擇內建版本並執行短路求值。

表示式 e 的型別和值類別滿足 BooleanTestable 要求當且僅當 decltype((e)) 建模 boolean-testable

(C++20 起)

BooleanTestable 型別(具有任何值類別)的示例包括 boolstd::true_type(C++11 起)std::bitset<N>::referenceint*

[編輯] 缺陷報告

下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。

缺陷報告 應用於 釋出時的行為 正確的行為
LWG 2114
(P2167R3)
C++98 可轉換為 bool 對於反映實現的期望來說太弱了 要求已加強

[編輯] 參閱

 (C++20)
指定型別可以在布林上下文中使用
(僅用於闡述的概念*)[編輯]