默认构造函数,哪一个更正确/惯用?

问题描述 投票:0回答:1

两者之间有什么区别吗

class A {
    std::vector<int> vec {1, 2, 3};
public:
    // more stuff...    
};

A a; // implicit default constructor

class B {
    std::vector<int> vec;
public:
    B() : vec {1, 2, 3} {}
    // more stuff...
}

B b; // default constructor

C++14 中哪一个更快/更惯用/正确?

在我的类中,我有 3 个成员:一个在类内部初始化的

static const
、一个初始化为 true 的布尔值和一个未初始化的
std::vector

我的两个构造函数初始化

std::vector
,并在必要时将布尔值更改为 false。我希望默认构造函数将
std::vector
初始化为 0?上面哪个选项更正确?

如果我初始化了

std::vector
成员,如果我这样做会发生什么? PS:我的班级不是 POD。

class B {
    std::vector<int> vec {1, 2, 3}; // already initialized vector
public:
    B(std::vector<int> const & data)
        : vec {data} // would it still be initialization or copy-assignment?
    {}
}

B b; //default constructor
c++11 vector initialization
1个回答
1
投票

前两个示例之间没有实际区别。 当您想在多个构造函数中使用相同的初始值设定项时,类内初始值设定项非常有用;当您想在不同的构造函数中使用不同的初始化程序时,构造函数初始化程序列表是必需的。

当您同时具有类内初始值设定项和构造函数成员初始值设定项时,该构造函数将忽略类内初始值设定项。 仍然只有一次初始化,没有赋值。

© www.soinside.com 2019 - 2024. All rights reserved.