两者之间有什么区别吗
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
前两个示例之间没有实际区别。 当您想在多个构造函数中使用相同的初始值设定项时,类内初始值设定项非常有用;当您想在不同的构造函数中使用不同的初始化程序时,构造函数初始化程序列表是必需的。
当您同时具有类内初始值设定项和构造函数成员初始值设定项时,该构造函数将忽略类内初始值设定项。 仍然只有一次初始化,没有赋值。