【问题标题】:Initialization list for an array of objects that that take parameters C++接受参数 C++ 的对象数组的初始化列表
【发布时间】:2014-04-04 18:14:48
【问题描述】:

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

我的意思:

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

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

我应该在 ???用参数 R 初始化数组 myA?

【问题讨论】:

    标签: c++ arrays list constructor initialization


    【解决方案1】:

    如果你有 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 必须是编译时常量,并且初始化器的数量必须与初始化器的数量相匹配。

    【讨论】:

    • 这样做的缺点是如果N 很大,那么您必须编写相当长的初始化列表。
    【解决方案2】:

    在这种情况下,使用std::vector 可能更简单:

    class B
    {
        std::vector<A> myA;
    
    public:
        B(int R) : myA(N, A(R)) {}
    };
    

    构造函数初始化器用N条目构造向量,所有条目都初始化为A(R)

    【讨论】:

    • 这看起来是一个更好的答案。它使用 R 来初始化 myA。
    猜你喜欢
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 2014-05-27
    • 2021-01-29
    相关资源
    最近更新 更多