使用带圆括号 ( ) 的构造函数参数初始化 in-class 成员?
Initialising in-class member with constructor arguments with round ( ) brackets?
对不起,我已经有一段时间没有编写 C++ 程序了,我想更新一下我在这里违反的确切规则的知识:
我能做到:
int main()
{
int a(5);
}
但做不到:
struct Foo
{
int a(5); // Error: expected a type specifier / Error: syntax error, 'constant'
}
我正在尝试重新获得一些丢失的知识,有人可以告诉我不允许这样做的规则吗?我很确定这里会有关于它的问题,我找不到它。我唯一记得的是委员会在 class 构造函数参数中进行了辩论(我认为是针对 C++11)并引入了新的波浪括号构造函数初始化器,如 int a{5};但我想知道为什么 int a(5); class 内不允许。这在 C++ 中一直是不允许的吗?
一种令人烦恼的解析。默认成员初始值设定项中的名称应该在已完成的 class 中查找,因为它们应该模仿构造函数初始值设定项。使用 ()
,编译器将无法弄清楚它在解析什么,因为它可以引用稍后在 class:
struct X {
int f(x); // function or data member?
static const int x = 1;
};