std::experimental::optional

從 cppreference.com
 
 
實驗性
技術規範
文件系統庫 (文件系統 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->()

Template:t 類型的對象被按語境轉換為 bool 時,如果對象含有值則轉換返回 true,而如果它不含有值則返回 false

以下條件下 optional 對象含有值

  • 對象以 T 類型的值初始化。
  • 對象從含有值的另一 optional 對象賦值。

以下條件下對象不含有值

  • 對象為默認初始化。
  • 對象以 std::experimental::nullopt_t 類型的值或不含有值optional 對象初始化。
  • 對象以 std::experimental::nullopt_t 類型的值或不含有值optional 對象賦值。

目錄

[編輯] 模板形參

T - 所要管理初始化狀態的值的類型。該類型必須滿足可析構 (Destructible) 的規定。

[編輯] 成員類型

成員類型 定義
value_type T

[編輯] 成員函數

構造 optional 對象
(公開成員函數) [編輯]
銷毀所含值,若有
(公開成員函數) [編輯]
賦值內容
(公開成員函數) [編輯]
觀察器
訪問所含值
(公開成員函數) [編輯]
檢查對象是否含有值
(公開成員函數) [編輯]
返回所含值
(公開成員函數) [編輯]
如果有則返回所含值,否則返回另一個值
(公開成員函數) [編輯]
修改器
交換內容
(公開成員函數) [編輯]
原位構造所含值
(公開成員函數) [編輯]

[編輯] 成員對象

成員名 定義
val (private) 指向所含值的指針(它指向相同對象的數據成員),其名字僅用於闡釋

[編輯] 非成員函數

比較 optional 對象
(函數模板) [編輯]
創建一個 optional 對象
(函數模板) [編輯]
特化 std::swap 算法
(函數) [編輯]

[編輯] 輔助類

特化 std::hash 算法
(類模板特化) [編輯]
(庫基礎 TS)
帶未初始化狀態的 optional 類型的指示器
(類) [編輯]
(庫基礎 TS)
用於 optional 類型的就地構造的消歧義標籤類型
(類) [編輯]
(庫基礎 TS)
指示進行了到不含值的 optional 的有檢查訪問的異常
(類) [編輯]

[編輯] 輔助對象

(庫基礎 TS)
nullopt_t 類型的對象
(函數) [編輯]
(庫基礎 TS)
std::experimental::in_place_t 類型的對象
(函數) [編輯]