一位朋友让我解释为什么
const const const const const int const i = 0;
这是有效的语法。我拒绝对此发表任何看法。虽然我很好奇它是否只是一个语法问题?
编辑。标签是C++,我的朋友参考的是gcc,所以我可能应该添加C标签。
从n1256:
6.7.3/4
如果在同一个specifier-qualifier-list中直接或通过一个或多个typedefs多次出现相同的限定符,其行为与仅出现一次时相同。
在C++中,这应该会报错。
从C++03标准:
7.1.5/1 [dcl.type]
通常情况下,在声明的完整decl-specifier-seq中只允许最多一个类型指定符。但以下是唯一的例外:
— const或volatile可以与任何其他类型指定符组合使用。 然而,除非通过typedefs(7.1.3)或模板类型参数(14.3)引入,否则禁止冗余的cv限定符,在这种情况下,忽略冗余的cv限定符。
从N3797 (C++11):
7.1.6/2 [dcl.type]
通常情况下,在声明的完整decl-specifier-seq或type-specifier-seq或trailing-type-specifier-seq中只允许最多一个类型指定符。但以下是唯一的例外:
— const can be combined with any type specifier except itself.
&
一样,我相信。typedef int& t; typedef t& u;
将意味着 u
和 t
是相同的类型。(但要注意字面上的 &&
,那是 c++11) - Aaron McDaid
const
生成错误,但它不会以任何方式抱怨constexpr const
(当然并不完全相同,但仍然在某种程度上是多余的)。 - Damon