std::make_optional
来自cppreference.com
在标头 <optional> 定义 | ||
template<class T > constexprstd::optional<std::decay_t<T>> make_optional( T&& value ); | (1) | (C++17 起) |
template<class T, class... Args> constexprstd::optional<T> make_optional( Args&&... args); | (2) | (C++17 起) |
template<class T, class U, class... Args> constexprstd::optional<T> make_optional(std::initializer_list<U> il, | (3) | (C++17 起) |
2) 从 args... 创建原位构造的
此重载只有在 std::is_constructible_v<T, Args...> 为 true 时才会参与重载决议。
optional
对象。等价于 returnstd::optional<T>(std::in_place, std::forward<Args>(args)...);。此重载只有在 std::is_constructible_v<T, Args...> 为 true 时才会参与重载决议。
3) 从 il 和 args... 创建原位构造的
此重载只有在 std::is_constructible_v<T, std::initializer_list<U>&, Args...> 为 true 时才会参与重载决议。
optional
对象。等价于 returnstd::optional<T>(std::in_place, il, std::forward<Args>(args)...);。此重载只有在 std::is_constructible_v<T, std::initializer_list<U>&, Args...> 为 true 时才会参与重载决议。
目录 |
[编辑]参数
value | - | 构造 optional 对象所用的值 |
il, args | - | 传递给 T 构造函数的实参 |
[编辑]返回值
构造的 optional
对象。
[编辑]异常
抛出 T
的构造函数所抛的任何异常。
[编辑]注解
因为受保证的复制消除,对于重载 (2,3)T
不需要可移动。
[编辑]示例
运行此代码
#include <iomanip>#include <iostream>#include <optional>#include <string>#include <vector> int main(){auto op1 = std::make_optional<std::vector<char>>({'a','b','c'});std::cout<<"op1: ";for(char c : op1.value())std::cout<< c <<',';auto op2 = std::make_optional<std::vector<int>>(5, 2);std::cout<<"\nop2: ";for(int i :*op2)std::cout<< i <<',';std::string str{"hello world"};auto op3 = std::make_optional<std::string>(std::move(str));std::cout<<"\nop3: "<< quoted(op3.value_or("empty value"))<<'\n';std::cout<<"str: "<<std::quoted(str)<<'\n';}
可能的输出:
op1: a,b,c, op2: 2,2,2,2,2, op3: "hello world" str: ""
[编辑]参阅
构造 optional 对象 (公开成员函数) |