对不起,我有一段时间没有编程C ++了,我想刷新一下我在这里违反的确切规则的知识:
我可以做到:
int main()
{
int a(5);
}
但不能:
struct Foo
{
int a(5); // Error: expected a type specifier / Error: syntax error, 'constant'
}
我正在尝试重新获得一些知识,有人可以指导我遵循禁止这样做的规则吗?我很确定这里会有一个问题,我找不到。我唯一记得的是,委员会在类构造函数参数方面辩论了(我认为是针对C ++ 11),并引入了新的方括号构造函数初始化程序,例如int a {5}。但我想知道为什么int a(5);不允许在课程内使用。在C ++中是否一直不允许这样做?
答案 0 :(得分:3)
一种令人烦恼的解析。默认成员初始化器中的名称应该在完成的类中查找,因为它们假定是模仿构造函数初始化器的。使用()
,编译器将无法确定其解析内容,因为它可以引用稍后在类中声明的内容:
struct X {
int f(x); // function or data member?
static const int x = 1;
};