我想在委托构造函数中使用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
成员?
答案 0 :(得分:1)
当构造函数将构造工作委托给另一个构造函数时,其他构造函数负责初始化所有成员和基类。
因此,在您的第一个构造函数中,数据成员c
尚未初始化。
RE
“我无法找到在委托构造函数期间保证初始化静态const成员的证据。
......它不是:它是作为静态初始化的一部分初始化的,它发生在 {/ 1}}中的第一个语句之前。
答案 1 :(得分:0)
在委托构造函数期间是否保证初始化静态const成员?
如果是变量或临时的,则执行常量初始化 具有静态或线程存储持续时间的对象由a初始化 实体的常量初始化程序。
因此c
初始化为100
委托构造函数中const成员的正确用法是什么?
我认为混淆不是委托构造函数而是初始化。
c
尚未在T(): T(c)