use*_*870 16 c++ initializer-list visual-c++ visual-c++-2010 c++11
我在VC++ 2010中编写了这个程序:
class class1
{
public:
class1 (initializer_list<int> a){};
int foo;
float Bar;
};
void main()
{
class1 c = {2,3};
getchar();
}
Run Code Online (Sandbox Code Playgroud)
但是当我编译项目时我得到这个错误:
错误1错误C2552:'c':无法使用初始化程序列表初始化非聚合c:\ users\pswin\documents\visual studio 2010\projects\test_c ++ 0x\test_c ++ 0x\main.cpp 27
和
2 IntelliSense:对于类型为"class1"的对象,不允许使用"{...}"进行初始化c:\ users\pswin\documents\visual studio 2010\projects\test_c ++ 0x\test_c ++ 0x\main.cpp 27
问题是什么?
Geo*_*che 35
它不应该被支持在所有:
[...]初始化程序列表的C++ 0x核心语言功能以及相关的标准库更改未在VC10中实现.
错误消息指的是聚合初始化的前C++ 0x功能,它允许使用花括号初始化某些用户定义的类型:
struct pair { int first; char second; };
pair p = { 0, 'c' };
Run Code Online (Sandbox Code Playgroud)
聚合在§8.5.1中定义:
聚合是一个数组或类(第9节),没有用户声明的构造函数(12.1),没有私有或受保护的非静态数据成员(第11节),没有基类(第10节),没有虚函数(10.3) ).
初始化聚合时,初始化程序可以包含一个initializer子句,该子句由一个括号括起来的逗号分隔的聚合成员初始化子句列表组成,以增加的下标或成员顺序编写.如果聚合包含子聚合,则此规则将递归地应用于子聚合的成员.