c++ - const 成员在委托(delegate)构造函数中的正确用法是什么?

标签 c++

我想在委托(delegate)构造函数中使用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。所以根据我的理解,在委托(delegate)构造函数期间,T::c 没有被初始化。我将 c 修改为 static const 成员:

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

这次的结果是100:

100

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

最佳答案

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

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

回复

I can’t find the evidence that static const member is guaranteed initialized during delegating constructor.

…不是:它是作为静态初始化的一部分进行初始化的,它发生在 main 中的第一个语句之前

关于c++ - const 成员在委托(delegate)构造函数中的正确用法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49765389/

相关文章:

c++ - Delphi链接器和C++链接器的区别

c++ - cv::imread() 导致内存损坏

c++ - 构造函数没有被调用

c++ - 当(CUDA 7.5 的)nvcc/cudafe++ 因段错误而崩溃时我该怎么办?

c++ - 哪些语言生成字节码并可以在 C++ 中加载/执行

C++算法计算多个数字的最小公倍数

c++ - 使用 fstream 进行 seekp 和 seekg

c++ - 我怎样才能调整这些功能,使其即使在值范围的极端情况下也能正常工作? (逆对数)

c++ - 如何确保 DirectX 11 应用程序在带有 C++ 的双 GPU 笔记本电脑上使用独立 GPU?

c++ - 通过 operator[] 访问静态成员 unordered_map