如果 T1 和 T2 有,std::p air<T1,T2>不应该有微不足道的默认构造函数吗?
shouldn't std::pair<T1,T2> have trivial default constructor if T1 and T2 have?
我遇到了一个问题,因为
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;
我没能为这个设计找到一个好的理由。如果T1
和T2
都有=default
构造函数,那么std::pair<T1,T2>
是否适合使用呢?
是否有简单的解决方法(比定义自己的pair<>
更简单)?
原因很简单:历史!最初的std::pair<T0, T1>
不能有一个琐碎的默认构造函数,因为它有一些其他构造函数。它被定义为初始化其成员。在std::pair<T0, T1>
中,对于人们依赖于初始化值的可构造类型,更改这种行为将是一个突破性的更改。
除了历史原因之外,std::pair<...>
的默认构造函数被定义为constexpr
构造函数。不能默认constexpr
默认构造函数。
我不知道除了创建一个自定义类之外还有什么解决办法。
std::pair值的默认构造函数初始化对的两个元素,第一个和第二个,所以它不可能是琐碎的。
相关文章:
- 什么是自动 t1=std::make_tuple(case1==case2,整数)的值
- 为什么当为T2抛出bad_alloc异常时,此代码中会发生内存泄漏
- <T> 从类型对象创建类型<T1>对象的构造函数
- 为 map<T1、T2> 迭代器创建模板函数
- <T2> <T1>当 T2 是 C++ 中 T1 的子类时,如何使用向量代替向量?
- 无法编译 T1 架构和仿真建模工具
- C++类型特征以在 T1 和 T2 之间进行选择
- 如何遍历两对 STL 集中的所有元素<对<t1,t2>,pair<t1,t2>>?
- 如果 T1 和 T2 有,std::p air<T1,T2>不应该有微不足道的默认构造函数吗?
- 为什么不支持从模板<类型名 T1、类型名 T2> 到模板<类型名 T1、int i> 的类专用化
- 确定与 std::function<R(T1,T2)兼容的函数类型集的规则>?
- 将元素从 std::vector 移动到 std::<T1>vector<std::p air<T1,T2>>
- 是否可以将默认构造函数设置为"std::map<T1,T2>"值?
- std::map<t1, t2>::erase(迭代器位置)的工作?
- 如何获取 std::hash_set<pair<T1、T2>> 进行编译和运行
- C++是否提供与 pair<T1、T2> 相当的"triple"模板?
- 为什么没有 bool std::operator==(T1* a, std::shared_ptr b) 的重载<T2>?
- 在模板<模板<class>类T1,类T2>中,是什么意思<class>?
- 正在强制转换std::pair
const&T1 const, T2>const&安全的 - 我可以创建像macro (x, Type1 t1, Type2 t2)这样的宏吗?