在C ++中,我试图在构造函数中初始化一个对象数组,这些对象的构造函数接受一个或多个参数。我想在构造函数的初始化列表而不是它的主体上执行此操作。这可能吗?如何?
我的意思是:
class A{
public:
A(int a){do something};
}
class B{
private:
A myA[N];
public:
B(int R): ???? {do something};
}
我该怎么办?使用参数R?
初始化数组myA答案 0 :(得分:3)
如果你有C ++ 11,你可以这样做:
B(int R) : myA{1, 2, 3, 4, 5, 6} { /* do something */ }
但是,如果您使用的是Visual Studio 2013,请注意目前不支持此语法。然而,有以下解决方法(无论如何可以说是更好的风格):
#include <array>
class B {
std::array<A, N> myA;
public:
B(int R) : myA({1, 2, 3, 4, 5, 6}) {}
};
但是,请注意,N必须是编译时常量,并且初始值设定项的数量具有以匹配初始值设定项的数量。
答案 1 :(得分:1)
在这种情况下,使用std::vector
:
class B
{
std::vector<A> myA;
public:
B(int R) : myA(N, A(R)) {}
};
构造函数初始化程序构造带有N
条目的向量,所有条目都初始化为A(R)
。