【发布时间】:2016-09-28 09:12:54
【问题描述】:
我正在学习 initializer list 并了解到必须使用它来初始化 const 成员,因为您无法使用默认构造函数或参数化构造函数对其进行初始化。
class Foo
{
private:
const int y;
public:
Foo(int yy) :y(yy){}
int getY();
};
现在假设如果我有另一个成员int x; 不是 const,为什么我不能使用默认构造函数初始化它,这个限制背后的想法是什么?
给出错误的代码:
class Foo
{
private:
const int y;
int x;
public:
Foo(int yy) :y(yy){}
Foo()
{
x = 100;
}
int getY();
};
【问题讨论】:
-
"为什么我不能使用默认构造函数来初始化它" 可以吗?能说清楚一点吗?
-
您可以在默认构造函数中初始化您喜欢的任何成员。我不明白这个问题。请为您认为不工作的内容发布 MCVE。
-
顺便说一句,“因为您无法使用默认构造函数或参数化构造函数对其进行初始化。”听起来您对“默认构造函数”一词有误解。
-
mcve 做得很好。我已经添加了对我的回答的回复,描述了您的代码问题。
-
你可能还没有在你的书/课程中介绍过这个,但也有一种间接的方式。一个构造函数可以委托到另一个构造函数,而不是有一个初始化列表。然后,
const成员必须由第二个委托构造函数初始化。
标签: c++ initializer-list