在C中允许重复的常量限定符,但在C++中不允许

Duplicate const qualifier allowed in C but not in C++?

本文关键字:但在 C++ 不允许 常量 许重复      更新时间:2023-10-16

示例代码片段

const const const int x = 10;   
int main()
{}

可以用C编译,但不能用C++编译。为什么它是用C编译的?我以为这在C中也会失败。没关系。

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

C99§6.7.3/4:

如果同一限定符在同一说明符限定符列表中多次出现,无论是直接出现还是通过一个或多个typedef出现,其行为与仅出现一次相同。

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

从上一个C++0x草稿,[dcl.type]:

作为一般规则,在声明的完整decl说明符seq中,或在类型说明符seq或尾部类型说明符seq中,最多允许有一个类型说明符。该规则的唯一例外情况如下:

--const可以与除其本身之外的任何类型说明符组合。

--volatile可以与除其本身之外的任何类型说明符组合。

--带符号或无符号可以与char、long、short或int组合。

--short或long可以与int.组合使用

--long可以与double组合。

--long可以与long组合。

C++2003在7.1.5/1中禁止它"…禁止冗余的cv限定符,除非通过使用typedefs或模板类型参数引入…"。

C++0x语法似乎允许它:

cv限定符seq

  • cv限定符 cv限定词seqopt

cv限定符

  const
  volatile

此外,[decl.type.cv]似乎允许它:

有两个cv限定符constvolatile。如果cv限定符出现在decl说明符seq中,则声明的init声明符列表不应为空。[注:3.9.3和8.3.5描述了简历质量的影响对象和函数类型。--结束语]多余的简历资格被忽略。[注:例如可以由typedefs引入。——尾注]

相关文章: