类初始化parens使用

时间:2014-01-19 10:32:22

标签: c++ c++11

我想初始化一些类成员,但我得到了错误 "expected parameter declarator"(使用clang ++) 使用g ++时"expected identifier before numeric constant". 所以我再次读取类初始化,然后编写代码:

#include <stdio.h>    
class AAA{
public:
    int l;
    AAA(int i){l=i;}
};

class BBB{
    bool normal;
    AAA aaa=10;
    AAA bbb(20);
    AAA ccc{30};
    AAA ddd={45};
};

int main(int argc, char **argv){printf("hello world\n");return 0;}

似乎不接受语法AAA bbb(20)

这是正常的吗? (我使用选项-std = c ++ 11)。

或者我错过了一些观点?

1 个答案:

答案 0 :(得分:8)

这很正常。 C ++ 11不允许在非静态数据成员的就地初始化中使用()括号。这是为了避免潜在的解析作为函数。 可以使用() perantheses语法:

AAA bbb = AAA(20);

因为无法将此表单解析为函数。