示例代码段
const const const int x = 10;
int main()
{}
在C中编译,但在C ++中编译。为什么用C编译?我认为这也会在C中失败。没关系。
C ++标准的哪一部分禁止使用重复的const
以及C标准的哪一部分允许这样做?
答案 0 :(得分:23)
C99§6.7.3/ 4:
如果相同的限定符在同一个说明符 - 限定符列表中出现多次,或者直接或通过一个或多个 typedef ,则行为与如果它只出现一次。
是的,这是有效的C99,您的发现是正确的。
答案 1 :(得分:16)
从上一个C ++ 0x草案中,[dcl.type]:
作为一般规则,在声明的完整decl-specifier-seq或类型说明符-seq或trailing-type-specifier-seq中最多允许一个类型说明符。此规则的唯一例外如下:
- const可以与除自身之外的任何类型说明符组合使用。
- volatile可以与除自身之外的任何类型说明符组合使用。
- signed或unsigned可以与char,long,short或int结合使用。
- 短或长可与int结合使用。
- long可以与double结合使用。
- long可以与long结合使用。
答案 2 :(得分:4)
C ++ 0x语法似乎允许它:
CV-限定符-SEQ :
- cv-qualifier cv-qualifier-seq opt
CV-限定符:
const volatile
此外,[decl.type.cv]
似乎允许:
有两个 cv-qualifiers ,
const
和volatile
。如果 cl-qualifier 出现在 decl-specifier-seq 中,则声明的 init-declarator-list 不应为空。 [注意:3.9.3和8.3.5描述了cv-quali的影响 对象和函数类型。 - 尾注]多余的cv资格被忽略。 [注意:例如,这些 可以由typedef引入。 - 结束说明]
答案 3 :(得分:4)
C ++ 2003在7.1.5 / 1中禁止它...“除非通过使用typedef或模板类型参数引入,否则禁止使用冗余cv限定符......”。