在以下示例中是否可以调用"而不是默认构造函数"对于B类构造函数中mVector的每个元素,是否为A类?
class A {
public:
A (int n) {/*stuff*/}
};
class B {
public:
B (): mVector(10) {} //call A(int n) constructor?
private:
vector<A> mVector;
};
答案 0 :(得分:5)
如果您想将所有元素设置为相同的值,那么constructor就是
mVector(10, 42) // 10 elements initialised with value 42
如果要将元素设置为不同的值,请使用列表初始化
mVector{1,2,3,4,5,6,7,8,9,10} // 10 elements with different values
严格地说,这并不完全符合你的描述;它创建一个临时T
,然后使用它来复制初始化每个向量元素。除非您的类型具有奇怪的复制语义,否则效果应该相同。
答案 1 :(得分:0)
你可以在这做一件事: -
B() : mVector(10, A(10))
{
}
或者
B() : mVector(10, 10)
{
}
两者基本上是一回事。但是,前一个更有效率。
答案 2 :(得分:0)
您可以使用构造函数重载std::vector
获取元素计数和值,对于您的用例相当于:
std::vector(size_type count, const T& value);
使用它来使用值类型的非默认构造函数初始化元素:
std::vector<A> mVector(10, A{0}); // 10 elements copy initialized using 'A{0}'.
或者在初始化列表中初始化时:
B() : mVector(10, A{0}) {}