为什么我们应该为initializer_list的情况重载转发构造函数?

时间:2016-12-08 17:04:11

标签: 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)

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

1 个答案:

答案 0 :(得分:4)

允许你这样做:

 optional<vector<int>> o(in_place_t, {1, 2, 3, 4, 5});

这比以下要短得多:

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