C++ 为什么这个常量声明有效
一位朋友让我解释原因C++ 为什么这个常量声明有效,c++,c,C++,C,一位朋友让我解释原因 const const const const const int const i = 0; 是有效的语法。我拒绝对这个问题有任何想法。虽然我很好奇这是否只是语法问题 编辑。TAG是C++,我的朋友在引用GCC,所以我应该添加C标签。 从n1256开始: 6.7.3/4 如果同一品质在同一时间出现多次 直接或通过一个或多个TypeDef的特定资格列表, 这种行为就像它只出现一次一样 在C++中,这会导致错误。 来自C++03标准: 7.1.5/1[dcl.类型] 作为一般
const const const const const int const i = 0;
是有效的语法。我拒绝对这个问题有任何想法。虽然我很好奇这是否只是语法问题
编辑。TAG是C++,我的朋友在引用GCC,所以我应该添加C标签。
从n1256开始:
6.7.3/4
如果同一品质在同一时间出现多次
直接或通过一个或多个TypeDef的特定资格列表,
这种行为就像它只出现一次一样
在C++中,这会导致错误。
来自C++03标准:
7.1.5/1[dcl.类型]
作为一般规则,在中最多允许一个类型说明符
完成声明的decl说明符seq。唯一的例外
该规则如下:
— const can be combined with any type specifier except itself.
-const或volatile可以与任何其他类型说明符组合。但是,除非通过使用typedefs(7.1.3)或模板类型参数(14.3)引入冗余cv限定符,否则禁止使用冗余cv限定符,在这种情况下,将忽略冗余cv限定符
从N3797(C++11)开始:
7.1.6/2[dcl.类型]
作为一般规则,在标准中最多允许一个类型规格
声明或类型规格的完整decl规格序列
或尾随类型规格。这条规则的唯一例外是
以下是:
— const can be combined with any type specifier except itself.
@康拉德。它是有效的C,但无效的C++。(无意删除)@GuilhermeBernal在这种情况下,我的评论是:问题被标记了。由于这些是不应该混淆的独立语言,我不确定您的评论添加了什么。现在OP添加了标签,这改变了一切。我对所讨论的语言感到困惑。但是我希望这能转化为C和C++。有趣的是,即使在C++11模式之外(实际上是允许的),g++也会为double
const
生成一个错误,但它不会以任何方式抱怨constepr const
(这当然不是一回事,但在同样的方式下仍然有些多余).我相信《代码》和《代码》也是如此<代码>类型定义int&t;类型定义t&u表示u
和t
是同一类型。(不过要小心,这是c++11)