c++ - 如果 T1 和 T2 有, std::pair<T1,T2> 不应该有微不足道的默认构造函数吗?

标签 c++ c++11 language-lawyer default-constructor

我遇到了问题,因为

 std::is_trivially_default_constructible<std::pair<T1,T2>>::value == false;

即使

 std::is_trivially_default_constructible<T1>::value == true;
 std::is_trivially_default_constructible<T2>::value == true;

我没有找到这个设计的充分理由。不适合 std::pair<T1,T2>有一个=default构造函数 if T1T2有吗?

有没有简单的解决方法(比定义我自己的 pair<> 更简单)?

最佳答案

原因很简单:历史!原文std::pair<T0, T1>不能有一个微不足道的默认构造函数,因为它有一些其他构造函数。它被定义为初始化其成员。在 std::pair<T0, T1> 中更改此行为对于人们依赖初始化值的简单可构造类型将是一个重大变化。

除了历史原因,std::pair<...> 的默认构造函数被定义为 constexpr构造函数。一个 constexpr默认构造函数不能默认。

除了创建自定义类之外,我不知道有什么解决方法。

关于c++ - 如果 T1 和 T2 有, std::pair<T1,T2> 不应该有微不足道的默认构造函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26591957/

相关文章:

c++ - 如何理解#1664的提议决议

c++ - B类方法中的dynamic_cast<A*>(this)?

C++ 使用 std::remove_if 删除二维 vector 的元素

c++ - 用计算值初始化 2D std::array 的最快和最简洁的方法

c++ - constexpr 表达式和变量生命周期,g++ 和 clang 不一致的例子

C++ union 成员访问和未定义行为

c++ - 如何借助QT中的任何API设置系统亮度?

c++ - 同时使用 MKL 和 Eigen LAPACK 时出错

c++ - QTreeWidget垂直滚动条跳得太远

c++ - 右值、左值和正式定义