【发布时间】:2015-10-14 11:52:27
【问题描述】:
我有这样的情况:
class A {
public:
A() : n(0) {}
private:
int n;
int m;
}
在构造函数中初始化m 在应用程序逻辑中根本没有意义。但是,Eclipse 警告我构造函数未初始化 m。我现在无法在其他地方运行代码。警告是:
成员 'm' 未在此构造函数中初始化
那么,C++ 是鼓励我们在构造函数中初始化所有数据成员还是只是 Eclipse 的逻辑?
【问题讨论】:
-
我称之为正确的面向对象实践:每个变量都应该被初始化并且对象准备好使用。 “没意思”?然后将其初始化为 0、-1 或 MIN_INTEGER 不会有害。
-
正是@duffymo。我只是好奇标准中是否有什么东西促使我这样做。
-
使用未初始化变量的值是未定义的行为。最安全的方法是在构造点初始化每个变量。对于类成员,你的构造函数应该确保每个变量都被初始化,或者它有一个自己的默认构造函数。
-
@duffymo 我认为在 OO 中(问题中没有任何关于 OO 的内容),私有成员的设置无关紧要。由类来维护需要维护的任何不变量。
-
标准没有明确说明。但是从未初始化的变量中读取的是UB。
标签: c++ eclipse initialization language-lawyer initializer-list