我很长一段时间以来的理解是,在预处理程序运行之后,C++转换单元是一系列声明(请注意,任何定义也是声明)。
许多人都对这一说法提出异议,但没有人提出反例。但是我自己发现了这个困扰我的例子:
int x; //declaration
; // ??? EMPTY DECLARATION?
int main() //dec
{ //la
} //ration
可以使用MSVC和在线comeau进行编译。我知道标准定义了一个空语句,但是我从未听说过一个空声明。因此,我看到三个选择:
请帮助我解决我的疑虑。谢谢
最佳答案
C++ 0x(的当前草案)在文件范围(以及 namespace 范围和允许声明的其他位置)中允许使用空声明,它只是一个分号。它是一个独立的语法实体。
在C++ 03中,仅在需要声明的地方不允许使用单独的分号。尽管看起来简单声明可能可以简化为分号,但显式规则却不允许这样做。
7 [dcl.dcl]/3
简而言之,这意味着只有在不省略decl-specifier-seq的情况下,才能省略init-declarator-list。
关于c++ - C++转换单元的语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4335024/