c – 在默认构造函数中明确设置初始化列表是否有优点或缺点?
作者:互联网
为C对象构造函数显式提供FULL初始化列表是否有任何优点或缺点? (尽管我们刚刚使用默认构造函数,但是你已经列出了所有成员的全部内容?)
例如,如果我有对象:
class MyObject
{
public:
MyObject();
private:
double _doub;
Foo _foo;
std::set<int> _intSet;
int _int;
Bar _bar;
}
与我的构造函数是否有任何区别:
MyObject::MyObject():
_doub(1.4), _foo("me"), _intSet(),
_int(5), _bar() {};
与仅列出我特别需要设置数据的对象(或调用非默认构造函数):
MyObject::MyObject():
_doub(1.4), _foo("me"), _int(5) {};
如果Class只有它使用默认构造函数的对象,我是否应该设置初始化列表?
例如:
class MyObject
{
public:
MyObject();
private:
Foo _foo;
std::set<int> _intSet;
Bar _bar;
}
是否有一个像这样的构造函数?
MyObject::MyObject():
_foo(), _intSet(), _bar() {};
谢谢.
解决方法:
()初始化程序为没有用户定义构造函数的对象调用“无需构造”值初始化.因此,对于此类对象,构造函数初始值设定项列表中explicit()初始化程序的存在与否会产生影响.
可以使用()初始化程序(“尽可能保持所有内容尽可能初始化”)和反对它(“避免无偿虚拟初始化”)进行参数化.
就个人而言,在使用或不使用()初始值设定项时行为相同的情况下,我会避免将成员包含在构造函数初始值设定项列表中.此外,如果行为不同但我还没有为特定成员创建有意义的初始化程序,我宁愿保持未初始化(而不是调用值初始化).
标签:c,initialization-list 来源: https://codeday.me/bug/20190729/1569649.html