【问题标题】:Do I have to initialize simple class member variables? [duplicate]我必须初始化简单的类成员变量吗? [复制]
【发布时间】:2011-03-04 10:36:39
【问题描述】:

快速初学者的问题:

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

例子:

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

谢谢!

【问题讨论】:

    标签: c++ class variables initialization


    【解决方案1】:

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

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

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

    或者他们保证会被分配 无论如何它们的默认值?

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 它们也可以分配在静态存储中。我相信值初始化是在这种情况下执行的,所以我会自动为 0,但我不确定。
      • 这个答案比上面的答案好得多,也简单得多。
      • @Darioush 是的,它更简单,因为它涵盖了通常的情况,而the top one 涵盖了所有情况。
      • 你不必,所以说有必要是错误的。
      • 原始提问者给出了替代方案“或者变量是否被分配了它们的默认值”。他们不。因此在 op 想知道存在哪些初始值的上下文中,这是必要的,并且可以省去很多麻烦。
      【解决方案3】:

      阅读this。此页面还有助于解决您在学习 C++ 的道路上可能遇到的许多其他问题。

      一般来说,您不必这样做,但应该这样做。依赖默认值真的会让你很难过。这也使其他人更好地理解代码。请记住,初始化列表不会影响成员的初始化顺序,这是由它们在类中声明的顺序决定的。

      【讨论】:

      • @vlad_tepesch,感谢您的通知,它已被移动 here
      猜你喜欢
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-31
      • 2013-01-03
      • 2011-01-07
      相关资源
      最近更新 更多