std::optional<T>::optional_C++中文网

C++ 参考手册

constexpr explicit optional( std::in_place_t,
                             std::initializer_list<U> ilist,

                             Args&&... args );

(7) (C++17 起)

template < class U = value_type >
constexpr optional( U&& value );

(8) (C++17 起)
(条件性 explicit)

构造新的 optional 对象。

1) 构造不含值的对象。

4) 转换复制构造函数:若 other 不含值,则构造不含值的 optional 对象。否则,构造含值的 optional 对象,如同以表达式 *other 直接初始化(但不是直接列表初始化) T 类型对象一般初始化。此构造函数不参与重载决议,除非满足下列条件:

5) 转换移动构造函数:若 other 不含值,则构造不含值的 optional 对象。否则,构造含值的 optional 对象,如同以表达式 std::move(*other) 直接初始化(但不是直接列表初始化) T 类型对象一般初始化。此构造函数不参与重载决议,除非满足下列条件:

6) 构造一个含值的对象,如同从参数 std::forward<Args>(args)... 直接初始化(但不是直接列表初始化) T 类型对象一般初始化。若选择的 T 构造函数为 constexpr 构造函数,则此构造函数为 constexpr 构造函数。该函数不参与重载决议,除非 std::is_constructible_v<T, Args...>true

参数

other - 要复制其所含值的另一 optional 对象
value - 初始化所含值所用的值
args... - 初始化所含值所用的参数
ilist - 初始化所含值所用的 initializer_list

异常

2) 抛出任何 T 的构造函数所抛的异常。

3) 抛出任何 T 的构造函数所抛的异常。拥有下列

4-8) 抛出任何 T 的构造函数所抛的异常。

示例

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

DR 应用于 出版时的行为 正确行为
P0602R4 C++17 即使底层构造函数平凡,复制/移动构造函数亦可能不平凡 要求传播平凡性

参阅