为什么不能以下列方式创建配对对象:
pair<int,int> p1 = {0,42}
答案 0 :(得分:6)
在C ++ 03中你应该使用
std::make_pair(0, 42);
因为pair不是简单的数据结构。 或通过调用对的构造函数,即
std::pair<int, int> p1(0, 42);
在C ++ 11中
pair<int, int> p1 = {0, 42}
没关系。
答案 1 :(得分:4)
C ++ 03中不允许使用初始化列表语法,因为std::pair
不是聚合,因此初始化的有效方式是构造函数调用。
C ++标准的正式定义(C ++ 038.5.1§1):
聚合是一个没有用户声明的数组或类(第9节) 构造函数(12.1),没有私有或受保护的非静态数据成员 (第11条),没有基类(第10条),也没有虚函数 (10.3)。
请阅读FAQ以获取详细说明。
通过引入std::initializer_list
,C ++ 11中的内容发生了变化。