我偏向于在构造函数中使用成员初始值设定项列表,但我早已忘记了其背后的原因。
您是否在构造函数中使用成员初始值设定项列表?如果是这样,为什么?如果没有,为什么不呢?
For POD https://stackoverflow.com/a/146454/626796数据成员,没有区别,只是风格问题。对于属于类的类成员,它可以避免对默认构造函数的不必要的调用。考虑:
class A
{
public:
A() { x = 0; }
A(int x_) { x = x_; }
int x;
};
class B
{
public:
B() { a.x = 3; }
private:
A a;
};
在这种情况下,构造函数为B
将调用默认构造函数A
,然后初始化a.x
to 3
。更好的方法是B
的构造函数直接调用A
初始化列表中的构造函数:
B() : a(3) {}
这只会调用A
's A(int)
构造函数而不是它的默认构造函数。在这个例子中,差异可以忽略不计,但想象一下如果你愿意的话A
的默认构造函数执行更多操作,例如分配内存或打开文件。不必要的话你不会想这么做的。
此外,如果一个类没有默认构造函数,或者您有一个const
或参考数据成员,您must使用初始化列表:
class A
{
public:
A(int x_) { x = x_; }
int x;
};
class B
{
public:
// 'a' and 'y' MUST be initialized in an initializer list;
// it is an error not to do so.
B() : a(3), y(2) {}
private:
A a;
const int y;
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)