创建配对对象c ++

时间:2012-08-16 09:29:13

标签: c++

为什么不能以下列方式创建配对对象:

pair<int,int> p1 = {0,42}

2 个答案:

答案 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中的内容发生了变化。