加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 在默认构造函数中明确设置初始化列表是否有优点或缺点?

发布时间:2020-12-16 09:41:35 所属栏目:百科 来源:网络整理
导读:为C对象构造函数显式提供FULL初始化列表是否有任何优点或缺点? (尽管我们刚刚使用默认构造函数,但是你已经列出了所有成员的全部内容?) 例如,如果我有对象: class MyObject{ public: MyObject(); private: double _doub; Foo _foo; std::setint _intSet; i
为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),_int(5) {};

如果Class只有它使用默认构造函数的对象,我是否应该设置初始化列表?

例如:

class MyObject
{
    public: 
        MyObject();

    private:
        Foo _foo;
        std::set<int> _intSet;
        Bar _bar;
}

是否有一个像这样的构造函数?

MyObject::MyObject():
    _foo(),_bar() {};

谢谢.

解决方法

()初始化程序为没有用户定义构造函数的对象调用“无需构造”值初始化.因此,对于此类对象,构造函数初始值设定项列表中explicit()初始化程序的存在与否会产生影响.

可以使用()初始化程序(“尽可能保持所有内容尽可能初始化”)和反对它(“避免无偿虚拟初始化”)进行参数化.

就个人而言,在使用或不使用()初始值设定项时行为相同的情况下,我会避免将成员包含在构造函数初始值设定项列表中.此外,如果行为不同但我还没有为特定成员创建有意义的初始化程序,我宁愿保持未初始化(而不是调用值初始化).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读