快速初学者的问题:
我有来初始化简单的类成员变量,还是保证在任何情况下都会为它们分配默认值?
示例:
class Foo {
int i;
// is i==0 or do I need the following line for that?
Foo() : i(0) {}
};
谢谢!
答案 0 :(得分:16)
我是否必须初始化简单类 成员变量,
不,您没有 来初始化成员变量。如果你没有初始化它们,不要认为它们会有任何价值。
如果您制作测试程序并在调试器中检查值的初始化方式,您可能会看到它们初始化为零,但这不能保证。这些值被初始化为该位置堆栈内存中的任何内容。
或保证他们被分配 在任何情况下都是默认值?
不保证会为他们分配任何价值。如果您有成员对象,则会为它们调用默认构造函数,但对于POD类型,没有默认初始化。
即使您不必这样做,最好初始化类的所有成员以避免难以找到错误并明确表示初始化/构造函数呼叫)。
答案 1 :(得分:2)
是的,这是必要的。您的对象将在堆栈或堆上分配。您无法知道内存包含哪些值,并且运行时不保证为您归零,因此必须初始化变量。
答案 2 :(得分:1)
阅读this。这个页面也有助于你学习C ++的石头路上的许多其他问题。
一般情况下,您不必这样做,但您应该这样做。依靠默认值可以真正回归你。这也使代码更好地理解其他人。请记住,初始化列表不会影响成员初始化的顺序,这取决于它们在类中声明的顺序。