Wal*_*ter 14 c++ default-constructor language-lawyer c++11
我遇到了一个问题,因为
std::is_trivially_default_constructible<std::pair<T1,T2>>::value == false;
Run Code Online (Sandbox Code Playgroud)
即使
std::is_trivially_default_constructible<T1>::value == true;
std::is_trivially_default_constructible<T2>::value == true;
Run Code Online (Sandbox Code Playgroud)
我没有找到这个设计的充分理由.如果有的话,拥有std::pair<T1,T2>一个=default构造函数是不合适的?T1T2
有一个简单的工作(比定义我自己更简单pair<>)?
原因很简单:历史!原来std::pair<T0, T1>没有一个普通的默认构造函数,因为它有一些其他的构造函数.它被定义为初始化其成员.std::pair<T0, T1>对于人们依赖于初始化值的简单可构造类型,改变这种行为将是一个突破性的变化.
除了历史原因,默认构造函数std::pair<...>被定义为constexpr构造函数.一个constexpr默认的构造函数,不能拖欠.
我不知道除了创建自定义类之外的解决方法.
| 归档时间: |
|
| 查看次数: |
649 次 |
| 最近记录: |