编译器生成的构造函数初始化成员

时间:2015-08-06 15:29:57

标签: c++ c++11 constructor c++14

有没有办法让(MSVC)编译器生成以下ctor'在初始化程序列表模式模式下面,它采用成员减速的顺序而不是(或者除了)默认构造函数?

struct Foo{
    float a;
    float b;
    float c;

    Foo(float _a, float _b, float _c) : a(_a), b(_b), c(_c) {}
};

2 个答案:

答案 0 :(得分:5)

它已经存在,因为您的示例是POD aggregate类型。

struct Foo{
    float a;
    float b;
    float c;
};

因此,您可以使用类似

的内容初始化Foo
Foo f{1.0f, 2.0f, 3.0f};

与手动定义的构造函数

的语法相同

Working demo

答案 1 :(得分:0)

您可以使用std::tuple

struct Foo : private std::tuple<float, float, float>{
    using std::tuple<float, float, float>::tuple;

    const float& a() const {std::get<0>(*this);}
    float& a() {std::get<0>(*this);}
    const float& b() const {std::get<1>(*this);}
    float& b() {std::get<1>(*this);}
    const float& c() const {std::get<2>(*this);}
    float& c() {std::get<2>(*this);}
};

但我认为这比编写构造函数更糟糕。