【发布时间】:2016-11-02 21:44:59
【问题描述】:
我想知道这段代码是否有区别:
class Foo{
private:
int a = 0;
public:
Foo(){}
}
还有:
class Foo{
private:
int a;
public:
Foo(): a(0) {}
}
如果是这样,应该首选哪个? 我知道使用初始化器列表比在构造函数主体中分配更好,但是初始化器列表与在字段声明中直接初始化(至少对于原始类型,就像这里的情况一样)呢?
还有,下面是什么情况:
class Foo{
private:
int a = 0;
public:
Foo(){}
Foo(int i): a(i) {}
}
当非默认构造函数被调用时:“a”是否被初始化了两次,先为0再为“i”,还是直接为“i”?
【问题讨论】:
-
它们是等价的。但是,IMO 字段初始化更具可读性。从类定义中查看 what 默认值 is 要容易得多。
-
... 但另一方面,更改默认值会导致重新编译包含标头的所有内容。了解它们并选择更适合您的情况。
-
根据 Olaf Dietsche 的回答 - 您错过了一个案例;其中 a=0 和 foo: a(0) 都被使用了
标签: c++