【发布时间】:2018-01-10 17:06:26
【问题描述】:
在阅读标准时,我真的很惊讶地发现,实际上,名称在声明中是可选的:
struct Magic {};
int main() {
int; // well-formed
Magic; // well-formed
}
对于那些有兴趣阅读标准的人来说,这是因为在 simple-declaration 中,init-declarator-list 是可选的。这是demo。
所以我真的很想知道为什么允许这样做。我为什么要那样做?这对我来说真的没有意义。我的理由是,如果没有意义,为什么要允许呢?
【问题讨论】:
-
@ChrisSprague 所以,“因为函数参数的语法相同,并且在那里很有用”?
-
@ChrisSprague 这很有道理。但是 parameter-declaration-clause 已经与 declator 一起使用了完全独立的语法(abstract-declarator)。我认为 declarator 没有必要这样做。
-
用户定义的对象可以在构造函数/析构函数中做一些工作(例如创建数据库事务)。
-
-pedantic-errors是你的朋友。 -
那个演示没有显示它的格式正确。一方面,我认为 Clang 只声称符合
-pedantic。另一方面,GCC 和 Clang 都说警告算作诊断消息,并且格式错误代码的所有标准要求都是诊断(通常);如果需要,编译器仍然可以发出程序。
标签: c++ c++11 declaration definition