class Test
{
;
int x;
};
这完全合法且便携吗?
答案 0 :(得分:6)
从我对标准的阅读中,这是不允许的。
如果仅查看语法定义,它似乎允许它。相关部分是:
成员规范出现在类声明中的{ ... }
之间。
member-specification 是 member-declaration 和访问说明符的序列。 成员声明的一种可能形式是:
attribute-speci fi er-seq opt decl-speci-er-seq opt member-declarator-列表 opt ;
因为分号之前的所有内容都是可选的,所以看起来它是空的 成员声明,仅由分号组成。
然而,9.2 / 1表示:
除了用于声明朋友(11.3)或将基类成员的名称引入派生类(7.3.3)之外,member-declarations声明了类的成员,每个这样的成员-declaration应至少声明一个类的成员名称。
由于空成员声明没有声明至少一个类的成员,所以即使某些编译器接受它,它似乎也不符合标准。