是否可以在类声明中使用杂散分号

Ale*_*lev 3 c++

class Test
{
  ;
  int x;
};
Run Code Online (Sandbox Code Playgroud)

这是完全合法和便携的吗?

int*_*jay 6

从我对标准的阅读来看,这是不允许的.

如果你只查看语法定义,它似乎允许它.相关部分是:

成员的规范是什么之间出现{ ... }在类声明.

member-specification是一系列成员声明和访问说明符.成员声明的一种可能形式是:

attribute-speci fi-seq opt decl-speci fi-seq opt member-declarator-list opt ;

因为分号之前的所有内容都是可选的,所以看起来它允许有一个空的 成员声明,它只包含一个分号.

但是,9.2/1表示:

除了用于声明朋友(11.3)或将基类成员的名称引入派生类(7.3.3)之外,成员声明声明该类的成员,并且每个此类成员声明至少应声明该类的一个成员名称.

由于空成员声明不会声明类的至少一个成员,因此即使某些编译器接受它,它似乎也不符合标准.