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

How to make brace initialization and default values work together?

本文关键字:默认值 一起 工作 初始化 何使大      更新时间:2023-10-16

下面的代码可以运行

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

int main()
{
    A a{ 1, 0.1 };
    return 0;
}

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

class A
{
public:
    int i = 0;
    float f = 3.14;
};

如何使两者协同工作?

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

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

现场演示

然而,正如@Kerek SB, @T.C已经提到的。在注释中,这将在c++ 14中修复,您的代码将按原样工作。