如何在初始化列表之前初始化const和引用类型?

时间:2016-07-10 23:44:42

标签: c++ visual-studio class initializer-list

Ivor Horton的Beginning Visual C ++ 2013阐述了"初始化列表"在C ++中:

"对于const或引用类型的类成员,您无法选择它们的初始化方式。唯一的方法是在构造函数中使用成员初始值设定项列表。构造函数体内的赋值不起作用。"

我的Visual Studio 2012 express没有编译初始化程序列表,所以我最初感到困惑,然后我意识到它不受支持。

我的问题是人们如何在初始化列表之前初始化 const或引用类型,因为本书说除了使用初始化列表之外没有其他方法?

2 个答案:

答案 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_listlist initialization无关,type name {stuff...};语法都是C ++ 11的功能。