C++ 对于初始值设定项\列表的情况,为什么要重载转发构造函数?

C++ 对于初始值设定项\列表的情况,为什么要重载转发构造函数?,c++,c++17,C++,C++17,std::optional提供将参数转发给所属对象的构造函数的构造函数: template<class...Args> optional(in_place_t,Args&&...args) 模板 可选(就地参数和参数) 但它也提供了这种过载: template<class U,class...Args> optional(in_place_t,initializer_list<U> l,Args&&...args)

std::optional
提供将参数转发给所属对象的构造函数的构造函数:

 template<class...Args>
 optional(in_place_t,Args&&...args)
模板
可选(就地参数和参数)
但它也提供了这种过载:

 template<class U,class...Args>
 optional(in_place_t,initializer_list<U> l,Args&&...args)
模板
可选(就地、初始值设定项、列表、参数和…参数)

最后一次过载的好处是什么?

它允许您执行以下操作:

 optional<vector<int>> o(in_place_t, {1, 2, 3, 4, 5});
可选o(位于{1,2,3,4,5});
这比:

 optional<vector<int>> o(in_place_t, std::initializer_list<int>{1, 2, 3, 4, 5});
可选o(in_place_t,std::initializer_list{1,2,3,4,5});

允许您执行以下操作:

 optional<vector<int>> o(in_place_t, {1, 2, 3, 4, 5});
可选o(位于{1,2,3,4,5});
这比:

 optional<vector<int>> o(in_place_t, std::initializer_list<int>{1, 2, 3, 4, 5});
可选o(in_place_t,std::initializer_list{1,2,3,4,5});

对关闭表示抱歉;我以为你问的是不同的问题。很抱歉我的问题被解决了;我以为你问的是不同的问题。