采用参数C ++的对象数组的初始化列表

时间:2014-03-03 15:50:38

标签: c++ arrays list constructor initialization

在C ++中,我试图在构造函数中初始化一个对象数组,这些对象的构造函数接受一个或多个参数。我想在构造函数的初始化列表而不是它的主体上执行此操作。这可能吗?如何?

我的意思是:

class A{
  public:
    A(int a){do something};
}

class B{
  private:
    A myA[N];
  public:
    B(int R): ???? {do something};
}

我该怎么办?使用参数R?

初始化数组myA

2 个答案:

答案 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)