我遇到了问题,因为
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 T1
和 T2
有吗?
有没有简单的解决方法(比定义我自己的 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/