std::experimental::optional<T>::optional
来自cppreference.com
| |
(1) | (库基础 TS) |
| |
(2) | (库基础 TS) |
| |
(3) | (库基础 TS) |
| |
(4) | (库基础 TS) |
| |
(5) | (库基础 TS) |
| |
(6) | (库基础 TS) |
| |
(7) | (库基础 TS) |
构造新 optional 对象。
1) 构造不含值的对象。
3) 移动构造函数:如果
other 含有值,则如同从表达式 std::move(*other) 直接初始化(但并非直接列表初始化)T 类型的对象一样初始化所含的值,且并不使 other 为空:被移动 optional 仍然含有值,但其值自身被移动。如果 other 并不含有值,则构造不含值的对象。4) 构造包含值的
optional 对象,如同从表达式 value 直接初始化(但并非直接列表初始化)T 类型的对象一样进行初始化。如果由直接初始化所选中的 T 的构造函数为 constexpr,则此构造函数为 constexpr。5) 构造包含值的
optional 对象,如同从表达式 std::move(value) 直接初始化(但并非直接列表初始化)T 类型的对象一样进行初始化。如果由直接初始化所选中的 T 的构造函数为 constexpr,则此构造函数为 constexpr。7) 构造包含值的
optional 对象,如同从实参 ilist, std::forward<Args>(args)... 直接初始化(但并非直接列表初始化)T 类型的对象一样进行初始化。如果 std::is_constructible<T, std::initializer_list<U>&, Args&&...>::value != true,则此函数并不参与重载决议。Parameters
| other | - | 从中复制其所包含值的另一 optional 对象
|
| value | - | 用以初始化所包含值的值 |
| args... | - | 用以初始化所包含值的实参 |
| ilist | - | 用以初始化所包含值的初始化式列表 |
| 类型要求 | ||
- 为使用重载 (2,4), T 必须满足可复制构造 (CopyConstructible) 。
| ||
- 为使用重载 (3,5), T 必须满足可移动构造 (MoveConstructible) 。
| ||
异常
2) 抛出
T 的构造函数所抛出的任何异常。3) 抛出
T 的构造函数所抛出的任何异常。具有如下 noexcept 声明:noexcept 说明:
noexcept(std::is_nothrow_move_constructible<T>::value)4-7) 抛出
T 的构造函数所抛出的任何异常。示例
运行此代码
#include <experimental/optional>
#include <iostream>
#include <string>
int