我有一段简单的代码:
const const int a = 10;
它无法使用 gcc 进行编译:
error: duplicate 'const'
但是 clang 编译时会显示警告:
warning: duplicate 'const' declaration specifier [-Wduplicate-decl-specifier]
Microsoft编译器还会生成警告。
使用volatile
限定词的情况也相同。
从[dcl.type](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf):
通常,在声明的完整decl-specifier-seq中或在define-type-specifier-seq中最多允许有一个type-type-specifier,而在类型说明符序列。 该规则的唯一例外如下:
(2.1) const可以与除自身以外的任何类型说明符组合。
(2.2) volatile可以与除自身以外的任何类型说明符组合。
(2.3) 有符号或无符号可以与char,long,short或int结合使用。
(2.4) short或long可以与int组合。
(2.5) long可以与double结合。
(2.6) long可以与long结合使用。
因此,我不太了解“一般规则”的含义。这正式有效吗?
我也找到了相关的问题Duplicate const qualifier allowed in C but not in C++?,但是讨论主要是关于c和c ++的区别。