我是否必须初始化简单的类成员变量?

Fra*_*ank 17 c++ variables initialization class

快速初学者的问题:

是否必须初始化简单的类成员变量,或者它们是否保证在任何情况下都被赋予默认值?

例:

class Foo {
  int i;
  // is i==0 or do I need the following line for that?
  Foo() : i(0) {}
};
Run Code Online (Sandbox Code Playgroud)

谢谢!

utn*_*tim 16

我是否必须初始化简单的类成员变量,

不,你不会初始化成员变量.如果你没有初始化它们,不要认为它们会有任何价值.

如果您创建一个测试程序并检查调试器如何初始化值,您可能会看到它们初始化为零,但这不能保证.这些值初始化为该位置堆栈内存中的任何内容.

或者他们是否保证在任何情况下都被分配了默认值?

他们无法保证获得任何价值.如果您有成员对象,则会为它们调用默认构造函数,但对于POD类型,没有默认初始化.

尽管您不必这样做,但最好初始化类的所有成员(以避免难以找到错误并明确表示初始化/构造函数调用).


Bjö*_*lex 1

这个。此页面对于您在学习 C++ 的道路上可能遇到的许多其他问题也很有帮助。

一般来说,您不必这样做,但您应该这样做。依赖默认值确实会给你带来很大的麻烦。这也使得代码更容易被其他人理解。请记住,初始化列表不会影响成员初始化的顺序,该顺序由它们在类中声明的顺序决定。