std::experimental::optional
從 cppreference.com
< cpp | experimental
在標頭 <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 類型的對象 (函數) |