如何让花括号初始化和默认值共同起作用?

12

以下代码可正常工作

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;
};

如何使两者共同运作?


15
这个问题将在C++14中得到解决。目前来看,花括号或等号初始化器会阻止一个类成为聚合体。 - Kerrek SB
5
请参见N3605N3653 - T.C.
1
具体来说,Clang已经解决了这个问题:http://coliru.stacked-crooked.com/a/02bf800843cb1195 - chris
1个回答

4
您需要像下面的示例一样定义默认和自定义构造函数:
您需要定义一个默认和一个自定义构造函数,就像下面的示例一样:
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中得到解决,您的代码将像原来一样工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接