【发布时间】:2015-02-24 13:05:11
【问题描述】:
我很想知道为什么类的数据成员不能使用 () 语法初始化?考虑以下示例:
#include <iostream>
class test
{
public:
void fun()
{
int a(3);
std::cout<<a<<'\n';
}
private:
int s(3); // Compiler error why???
};
int main()
{
test t;
t.fun();
return 0;
}
程序编译失败并出现以下错误。
11 9 [Error] expected identifier before numeric constant
11 9 [Error] expected ',' or '...' before numeric constant
为什么?是什么原因? C++ 标准对类数据成员的初始化有何规定? 非常感谢您的帮助。谢谢
【问题讨论】:
-
“那为什么不能使用 () 语法初始化类的数据成员?” 因为语言标准是这样说的?
-
@πάνταῥεῖ:也许这里也应该有一个语言律师标签;我觉得问题更多:为什么在其他地方都允许这种做法时,标准会明确禁止这种做法?
-
有几种不同的初始化语法,每一种只在某些地方有效,这就是为什么要为 C++11 开发统一的初始化语法。
-
@ArunA.S:不相关的评论。这可以按原样实现,只需将
(更改为{并将)更改为}。无需重构所有内容。
标签: c++ initialization language-lawyer