如何使大括号初始化和默认值一起工作?

use*_*020 12 c++ initialization

以下代码有效

class A
{
public:
    int i;
    float f;
};


int main()
{
    A a{ 1, 0.1 };
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我为A的成员添加默认值,则它不起作用

class A
{
public:
    int i = 0;
    float f = 3.14;
};
Run Code Online (Sandbox Code Playgroud)

如何让两者一起工作?

101*_*010 4

您必须定义一个默认构造函数和一个自定义构造函数,如下例所示:

class A
{
public:
    A() {}  
    A(int const _i, float const _f) : i(_i), f(_f) {}
    int i = 0;
    float f = 3.14;
};
Run Code Online (Sandbox Code Playgroud)

现场演示

然而,正如@Kerek SB和 @TC在评论中已经提到的,这将在 C++14 中修复,并且您的代码将按原样工作。