std::optional
有以下构造函数:
template < class U = T >
constexpr optional( U&& value );
Run Code Online (Sandbox Code Playgroud)
这里的问题是:为什么模板参数U
默认为 type T
?如果简单地将构造函数更改为以下内容会发生什么:
template < class U /* = T */>
constexpr optional( U&& value );
Run Code Online (Sandbox Code Playgroud)
因此,如果您给它一个初始值设定项列表(它没有类型,因此无法推断 的类型U
),它将初始化一个T
临时值。
例如:
std::optional<std::vector<int>> opt({1, 2, 3});
// No type deduced for `U`, defaults to `std::vector<int>`
struct X {
int a, b;
};
std::optional<X> opt({.a = 1, .b = 2});
// Same here
Run Code Online (Sandbox Code Playgroud)