【问题标题】:How were const and reference types initialized before initializer lists?const 和引用类型是如何在初始化列表之前初始化的?
【发布时间】:2016-11-12 20:07:25
【问题描述】:

Ivor Horton 的 Visual C++ 2013 开头陈述了 C++ 中的“初始化列表”:

“对于 const 或引用类型的类成员,您无法选择如何初始化它们。唯一的方法是在构造函数中使用成员初始化器列表。构造函数体内的赋值将不行。”

我的 Visual Studio 2012 express 没有编译初始化列表,所以一开始我很困惑,然后我意识到它不支持它。

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

【问题讨论】:

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


【解决方案1】:

您混淆了两个单独的术语。没关系;它们的名称几乎相同。

有初始化列表(我称之为“braced-init-lists”正是为了避免这种混淆)。这些是{} 分隔的项目序列,用于初始化值。如果项目属于同一类型,则可以将它们转换为std::intializer_list。这是 C++11 的补充。

然后,在构造函数中有成员初始化列表。就是这样的语法:

TypeName(params)
  : member1(...)
  , member2(...)
{
  /*constructor code*/
}

自 C++98/03 以来,C++ 中就有了。成员初始化列表是您如何初始化const 成员和引用类型。

【讨论】:

  • 也称为 ctor-initializer
【解决方案2】:

Horton 的引述谈到了 Member initialization list,这是一个 C++98 特性。

这与std::initializer_listlist initialization 无关,type name {stuff...}; 语法确实都是 C++11 的特性。

【讨论】:

    猜你喜欢
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    相关资源
    最近更新 更多