pet*_*sev 3 c++ syntax undefined-behavior
有人向我指出,我在某些c ++代码中看起来像是一个拼写错误:
protected:
Foo x, y,;
Run Code Online (Sandbox Code Playgroud)
我原本以为尾随的逗号会出错,但显然它不是?这是不确定的,或者会发生什么?可能是坏事,因为代码检查程序抱怨它.
相关的语法产生见§9.2:
member-declarator-list:
member-declarator
member-declarator-list , member-declarator
Run Code Online (Sandbox Code Playgroud)
逗号只允许分隔声明符(名称).member-declarator本身可能不包含逗号.
编辑:这里是成员声明者 ...它不是自包含的,声明者的语法通常是一个蜘蛛网.
member-declarator:
declarator virt-specifier-seq(opt) pure-specifier(opt)
declarator brace-or-equal-initializer(opt)
identifier(opt) attribute-specifier-seq(opt) : constant-expression
Run Code Online (Sandbox Code Playgroud)
不正确的语法不是未定义的行为; 允许错误放置逗号的编译器有一个错误.拒绝那种东西是标准的要求.
注意,枚举定义和大括号初始化器中允许使用尾随逗号.我认为这两个案例都是由C++ 11添加的,以简化编写源代码生成器.(即使有这么简单的要求,预处理器也经常会遇到困难.)通常,简单的生成器可能会避免创建具有多个名称的声明,因为由于语法复杂,它可能是一堆蠕虫.另一方面,;允许包含空的声明,如成员函数定义后的分号.
| 归档时间: |
|
| 查看次数: |
278 次 |
| 最近记录: |