【发布时间】:2011-08-11 17:15:18
【问题描述】:
我在思考 c++0x 规范中明显的歧义时遇到了问题,另请参阅:http://www.nongnu.org/hcb/
假设我们有代码
void foo() {};
我个人将代码解释为function-definition,后跟empty-declaration。但是,看看语法规范,我想说这可以很容易地解释为 simple-declaration,它是 block-declaration 的一部分,因此在 declaration 的列表中更早提到...
这是我对如何将其解析为简单声明的解释:
void foo() {};"
-> 简单声明
void
-> decl-specifier-seq -> decl-specifier -> type-specifier -> trailing-type- 说明符 -> 简单类型说明符
foo() {}
-> 初始化声明器列表-> 初始化声明器
foo()
-> 声明符 -> ptr 声明符 -> noptr 声明符
foo
-> 声明符-id -> ...
()
-> 参数和限定符
{}
-> 初始化器 -> 大括号初始化列表
所以这应该可以被解析为一个简单的声明。
有人告诉我应该使用规范的 6.8 来消除这种情况,但我不太明白为什么。 simple-declaration 是 expression-statement,因为它以 ; 结尾吗?
【问题讨论】:
标签: c++ parsing c++11 specifications