在C中允许重复的const限定符但在C++中不允许?

Pra*_*rav 21 c c++ language-agnostic const

示例代码段

const const const int x = 10;   
int main()
{}
Run Code Online (Sandbox Code Playgroud)

用C语言编译而不是用C++编译.为什么用C编译?我认为这也会在C中失败.没关系.

C++标准的哪一部分禁止使用复制品const,哪部分C标准允许这样做?

Pot*_*ter 23

C99§6.7.3/ 4:

如果相同的限定词出现在同一不止一次说明符限定符列表,直接或通过一个或一个以上的typedef S,行为是一样的,如果只出现过一次.

是的,这是有效的C99,您的发现是正确的.

  • @Prasoon,我怀疑C人们太过于挂在他们的宏上,而C++人确实使用了正确的`typedef`,而不需要这些奇怪的结构.请注意,`const const`是一个C99特性,它们描述为允许"幂等类型限定符".在旧的C89中无效. (7认同)

ybu*_*ill 16

从最后的C++ 0x草案中,[dcl.type]:

作为一般规则,在声明的完整decl-specifier-seq或类型说明符-seq或trailing-type-specifier-seq中最多允许一个类型说明符.此规则的唯一例外情况如下:

- const可以与除自身之外的任何类型说明符组合使用.

- volatile可以与除自身之外的任何类型说明符组合使用.

- signed或unsigned可以与char,long,short或int结合使用.

- 短或长可与int结合使用.

- 长可以加倍.

- 长期可以结合使用.

  • @ybungalobill:如果只是为了这个...这应该是C++的*普通*部分.考虑编写逻辑以获得例如.'a?的类型?b:c`或存在rvalue引用时的重载决策规则,正确处理转换序列等.这种语言过于复杂! (3认同)

Ala*_*kes 5

C++ 2003 在 7.1.5/1 中禁止它“......多余的 cv 限定符被禁止,除非通过使用 typedef 或模板类型参数引入......”。