C++ 中单号“:”的重要性

Vij*_*jay 4 c++ member-functions

可能的重复:
构造函数中这个奇怪的冒号成员语法是什么?

我很少在常规代码中遇到类中的单个冒号,例如:

A::member():b(),c()
{
}
Run Code Online (Sandbox Code Playgroud)

单冒号在这里的重要性是什么?为什么用在这里?有时是强制性的吗?如果是,在哪些情况下?

Leo*_*Hat 23

此上下文中的单个冒号用于表示您正在使用初始化列表。一个初始化列表来:

  • 从派生类调用基类构造函数
  • 初始化类的成员变量

正如其他人所指出的,初始化列表只能用于类构造函数。

虽然也可以在构造函数的主体中初始化成员变量,但通过初始化列表这样做有几个原因:

  • 不能从构造函数体初始化常量指针或引用
  • 使用初始化列表通常更有效,因为它(从内存中)只调用成员的构造函数,而不是构造函数和赋值运算符,这对于非 POD 类型来说可能会很昂贵。

说了这么多,你的代码格式有点奇怪。在我通常使用的代码中,初始化列表的使用会像这样缩进:

A::A()
    :b(),
     c()
{
}
Run Code Online (Sandbox Code Playgroud)

这让我更清楚,:与::用于定义A::A().