Ivor Horton的Beginning Visual C ++ 2013阐述了"初始化列表"在C ++中:
"对于const或引用类型的类成员,您无法选择它们的初始化方式。唯一的方法是在构造函数中使用成员初始值设定项列表。构造函数体内的赋值不起作用。"
我的Visual Studio 2012 express没有编译初始化程序列表,所以我最初感到困惑,然后我意识到它不受支持。
我的问题是人们如何在初始化列表之前初始化 const或引用类型,因为本书说除了使用初始化列表之外没有其他方法?
答案 0 :(得分:4)
你混淆了两个单独的术语。没关系;他们的名字几乎相同。
有初始化列表(我称之为" braced-init-lists"正是为了避免这种混淆)。这些是{}
分隔的项目序列,用于初始化值。如果项目属于同一类型,则可以将它们转换为std::intializer_list
。这是C ++ 11的补充。
然后,构造函数中有成员初始化列表。这就是这种语法:
TypeName(params)
: member1(...)
, member2(...)
{
/*constructor code*/
}
自C ++ 98/03以来,它一直在C ++中。成员初始化列表是初始化const
成员和引用类型的方式。
答案 1 :(得分:1)
Horton引用了Member initialization list这是一个C ++ 98特性。
这与std::initializer_list
和list initialization无关,type name {stuff...};
语法都是C ++ 11的功能。