2012-08-16 104 views
1

为什么它不可能建立在以下方式对对象:在C++ 03创建对对象C++

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

你为什么认为这是不可能的? – sbi 2012-08-16 09:37:54

+0

如果您在Linux下编译,请尝试使用-std = C++ 11进行链接。如果你已经包含了分号等,它应该可以正常工作。 – Owl 2016-03-29 16:15:58

回答

5

你应该使用

std::make_pair(0, 42); 

因为对不是简单的数据 - 结构体。 或由一对即

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

的调用构造在C++ 11

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

是好的。

4

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

从C++标准(C++ 03 8.5.1§1)

形式定义:

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

请详细阅读FAQ

通过引入std::initializer_list改变了C++ 11中的事物。