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