std::experimental::optional<T>:: optional
|
constexpr
optional
(
)
noexcept
;
constexpr optional ( std:: experimental :: nullopt_t ) noexcept ; |
(1) | (库基础技术规范) |
|
optional
(
const
optional
&
other
)
;
|
(2) | (库基础技术规范) |
|
optional
(
optional
&&
other
)
noexcept
(
/* 见下文 */
)
;
|
(3) | (库基础技术规范) |
|
constexpr
optional
(
const
T
&
value
)
;
|
(4) | (库基础技术规范) |
|
constexpr
optional
(
T
&&
value
)
;
|
(5) | (库基础技术规范) |
|
template
<
class
...
Args
>
constexpr explicit optional ( std:: experimental :: in_place_t , Args && ... args ) ; |
(6) | (库基础技术规范) |
|
template
<
class
U,
class
...
Args
>
constexpr
explicit
optional
(
std::
experimental
::
in_place_t
,
|
(7) | (库基础技术规范) |
构造一个新的
optional
对象。
T
的对象一般初始化所含值。若
other
不包含值,则构造一个
不包含值
的对象。
T
的对象般初始化所含值,且
不会
使
other
变为空:被移动的 optional 仍
包含值
,但该值本身已被移走。若
other
不包含值,则构造一个
不包含值
的对象。
T
对象进行
直接初始化
(但不包括直接列表初始化)。如果通过直接初始化选择的
T
的构造函数是
constexpr
的,则该构造函数也为
constexpr
。
T
对象进行直接初始化(但不包括直接列表初始化)。若通过直接初始化选择的
T
的构造函数为
constexpr
,则此构造函数亦为
constexpr
。
T
对象进行
直接初始化
(但不包括直接列表初始化)。
T
对象进行
直接初始化
(但不包括直接列表初始化)。若
std::
is_constructible
<
T,
std::
initializer_list
<
U
>
&
, Args
&&
...
>
::
value
!
=
true
,则该函数不参与重载决议。
目录 |
参数
| other | - |
用于复制其包含值的另一个
optional
对象
|
| value | - | 用于初始化包含值的值 |
| args... | - | 用于初始化包含值的参数 |
| ilist | - | 用于初始化包含值的初始化列表 |
| 类型要求 | ||
-
T
必须满足
CopyConstructible
要求才能使用重载 (2,4)
|
||
-
T
必须满足
MoveConstructible
要求才能使用重载 (3,5)
|
||
异常
T
的构造函数抛出的任何异常。
T
的构造函数抛出的任何异常。具有以下
noexcept
声明:
T
构造函数抛出的任何异常。
示例
#include <experimental/optional> #include <iostream> #include <string> int main() { std::experimental::optional<int> o1, // 空值 o2 = 1, // 从右值初始化 o3 = o2; // 拷贝构造 std::experimental::optional<std::string> o4(std::experimental::in_place, {'a', 'b', 'c'}); std::cout << *o2 << ' ' << *o3 << ' ' << *o4 << '\n'; }
输出:
1 1 abc
另请参阅
创建
optional
对象
(函数模板) |