2

为什么无法通过以下方式创建对对象:

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

2 回答 2

8

在 C++03 中你应该使用

std::make_pair(0, 42);

因为pair不是简单的数据结构。或通过调用对的构造函数,即

std::pair<int, int> p1(0, 42);

在 C++11 中

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

没关系。

于 2012-08-16T09:30:43.797 回答
4

C++03 中不允许初始化列表语法,因为std::pair它不是聚合,因此有效的初始化方式是构造函数调用。

C++ 标准的正式定义(C++03 8.5.1 §1):

聚合是一个数组或一个类(第 9 条),没有用户声明的构造函数(12.1),没有私有或受保护的非静态数据成员(第 11 条),没有基类(第 10 条),也没有虚函数(10.3) )。

请阅读常见问题解答以获得详细说明。

在 C++11 中,通过引入std::initializer_list.

于 2012-08-16T09:47:16.343 回答