委托构造函数中const成员的正确用法是什么?

时间:2018-04-11 02:08:50

标签: c++

我想在委托构造函数中使用const类成员变量。请检查以下代码:

#include <iostream>

using namespace std;
class T
{
  const int c = 100;
public:

  T(int i)
  {
      cout << i << endl;
  }

  T() : T(c)
  {

  }
};

int main()
{
    T t;

    return 0;
}

运行结果是:

  

0

我假设输出应为100。因此,根据我的理解,在委托构造函数期间,T::c未初始化。我将c修改为static const成员:

class T
{
  static const int c = 100;
  ......
}

这次结果是100

  

100

但是在检查static member引用之后,我找不到在委托构造函数期间保证static const成员被初始化的证据。委托构造函数中const成员的正确用法是什么?在委托构造函数期间是否保证初始化static const成员?

2 个答案:

答案 0 :(得分:1)

当构造函数将构造工作委托给另一个构造函数时,其他构造函数负责初始化所有成员和基类。

因此,在您的第一个构造函数中,数据成员c尚未初始化。

RE

  

我无法找到在委托构造函数期间保证初始化静态const成员的证据。

......它不是:它是作为静态初始化的一部分初始化的,它发生在 {/ 1}}中的第一个语句之前

答案 1 :(得分:0)

  

在委托构造函数期间是否保证初始化静态const成员?

来自basic.start.static#2

  

如果是变量或临时的,则执行常量初始化   具有静态或线程存储持续时间的对象由a初始化   实体的常量初始化程序

因此c初始化为100

  

委托构造函数中const成员的正确用法是什么?

我认为混淆不是委托构造函数而是初始化。

c尚未在T(): T(c)

中初始化