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

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

最后一个重载有什么好处?

最佳答案

它允许你这样做:

 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});

关于c++ - 为什么我们应该为 initializer_list 的情况重载转发构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41044938/

相关文章:

c++ - 改进折叠功能

c++ - 使用 -std=c++17 编译时在 GCC 中恢复 std::auto_ptr

C++ 在折叠运算符中迭代元组

c++ - 如何构造一个类型特征来判断一个类型的私有(private)方法是否可以在另一种类型的构造函数中调用?

java - C++ this 在构造函数中?

c++ - 如何记录 Doxygen 中的重载函数?

c++ - clock_gettime() 每 50-100 毫秒返回大约 1-2 毫秒的误差(Virtualbox 上的 Debian wheezy)

c++ - 为什么我会收到运行时检查失败 #2 - 变量 'x' 周围的堆栈已损坏?

c++ - 我试图用 C++ 编写递归斐波那契数列,但是当我编译时出现错误

c++ - 复制构造函数与 std::initializer_list 构造函数