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

时间:2010-06-16 12:09:24

标签: c++ class variables initialization

快速初学者的问题:

来初始化简单的类成员变量,还是保证在任何情况下都会为它们分配默认值?

示例:

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

谢谢!

3 个答案:

答案 0 :(得分:16)

  

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

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

如果您制作测试程序并在调试器中检查值的初始化方式,您可能会看到它们初始化为零,但这不能保证。这些值被初始化为该位置堆栈内存中的任何内容。

  

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

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

即使您不必这样做,最好初始化类的所有成员以避免难以找到错误并明确表示初始化/构造函数呼叫)。

答案 1 :(得分:2)

是的,这是必要的。您的对象将在堆栈​​或堆上分配。您无法知道内存包含哪些值,并且运行时不保证为您归零,因此必须初始化变量。

答案 2 :(得分:1)

阅读this。这个页面也有助于你学习C ++的石头路上的许多其他问题。

一般情况下,您不必这样做,但您应该这样做。依靠默认值可以真正回归你。这也使代码更好地理解其他人。请记住,初始化列表不会影响成员初始化的顺序,这取决于它们在类中声明的顺序。