initializer_list在VC10中不起作用

时间:2010-05-07 22:21:22

标签: c++ visual-c++ c++11 initializer-list visual-c++-2010

我在VC ++ 2010中编写了这个程序:

class class1
{
public:
 class1 (initializer_list<int> a){};
 int foo;
 float Bar;
};
void main()
{
 class1 c = {2,3};
 getchar();
}

但是当我编译项目时我得到了这个错误:

  

错误1错误C2552:'c':   非聚合无法初始化   使用初始化程序   list c:\ users \ pswin \ documents \ visual   工作室   2010 \ projects \ test_c ++ 0x \ test_c ++ 0x \ main.cpp 27

  

2 IntelliSense:初始化   '{...}'不允许用作对象   类型   “class1”c:\ users \ pswin \ documents \ visual   工作室   2010 \ projects \ test_c ++ 0x \ test_c ++ 0x \ main.cpp 27

问题是什么?

1 个答案:

答案 0 :(得分:35)

不应该支持at all

  

[...]初始化程序列表的C ++ 0x核心语言功能以及相关的标准库更改未在VC10中实现。

错误消息指的是聚合初始化的前C ++ 0x特性,它允许使用花括号初始化某些用户定义的类型:

struct pair { int first; char second; };
pair p = { 0, 'c' };

聚合在§8.5.1

中定义
  

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

     

初始化聚合时,初始化程序可以包含一个初始化子句,该子句由括号括起来的逗号分隔的聚合成员初始化子句列表组成,以增加的下标或成员顺序编写。如果聚合包含子聚合,则此规则以递归方式应用于子聚合的成员。