名稱空間
變體
操作

std::experimental::optional

來自 cppreference.com
< cpp‎ | 實驗性
 
 
實驗性
技術規範
檔案系統庫 (檔案系統 TS)
庫基礎 (庫基礎 TS)
庫基礎 2 (庫基礎 TS v2)
庫基礎 3 (庫基礎 TS v3)
並行性擴充套件 (並行性 TS)
並行性擴充套件 2 (並行性 TS v2)
併發性擴充套件 (併發性 TS)
併發擴充套件 2 (併發 TS v2)
概念 (概念 TS)
範圍 (範圍 TS)
反射 (反射 TS)
數學特殊函式 (特殊函式 TR)
實驗性非 TS
模式匹配
線性代數
std::execution
契約
2D 圖形
 
 
 
定義於標頭檔案 <experimental/optional>
template< class T >
class optional;
(庫基礎 TS)

類模板 std::experimental::optional 管理一個可選的所含值,即一個可能存在也可能不存在的值。

optional 的常見用例是可能失敗的函式的返回值。與 std::pair<T,bool> 等其他方法不同,optional 能夠很好地處理構造開銷大的物件,並且更具可讀性,因為它明確表達了意圖。

在任何給定時間,任何 optional<T> 例項都要麼包含一個值,要麼不包含值

如果一個 optional<T> 包含一個值,則該值保證作為 optional 物件記憶體空間的一部分進行分配,即不會發生動態記憶體分配。因此,optional 物件模擬的是一個物件,而不是一個指標,儘管定義了 operator*()operator->()

當型別為 optional<T> 的物件被上下文轉換為 bool 時,如果該物件包含一個值,則轉換返回 true;如果它不包含值,則返回 false

在以下情況下,optional 物件包含一個值

  • 物件用型別為 T 的值初始化。
  • 物件從另一個包含值optional 賦值。

在以下情況下,物件不包含值

  • 物件預設初始化。
  • 物件用 std::experimental::nullopt_t 的值或一個不包含值optional 物件初始化。
  • 物件從 std::experimental::nullopt_t 的值或從一個不包含值optional 賦值。

目錄

[編輯] 模板引數

T - 要管理初始化狀態的值的型別。該型別必須滿足 可銷燬 (Destructible) 的要求。

[編輯] 成員型別

成員型別 定義
value_type T

[編輯] 成員函式

構造 optional 物件
(public member function) [編輯]
如果存在,銷燬所包含的值
(public member function) [編輯]
賦值內容
(public member function) [編輯]
觀察器
訪問所包含的值
(public member function) [編輯]
檢查物件是否包含值
(public member function) [編輯]
返回所包含的值
(public member function) [編輯]
如果可用,返回包含的值,否則返回另一個值
(public member function) [編輯]
修改器
交換內容
(public member function) [編輯]
就地構造包含的值
(public member function) [編輯]

[編輯] 成員物件

成員名稱 (Member name) 定義
val (private) 指向所含值的指標(指向同一物件的成員資料),此名稱僅用於說明。

[編輯] 非成員函式

比較 optional 物件
(function template) [編輯]
建立 optional 物件
(function template) [編輯]
特化 std::swap 演算法
(function) [編輯]

[編輯] 輔助類

特化 std::hash 演算法
(class template specialization) [編輯]
(庫基礎 TS)
指示未初始化狀態的可選型別
(class) [編輯]
(庫基礎 TS)
用於就地構造可選型別的消歧標記型別
(class) [編輯]
(庫基礎 TS)
當檢查式訪問不包含值的 optional 時丟擲的異常
(class) [編輯]

[編輯] 輔助物件

(庫基礎 TS)
nullopt_t 型別的物件
(function) [編輯]
(庫基礎 TS)
型別為 std::experimental::in_place_t 的物件
(function) [編輯]