Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么这个常量声明有效_C++_C - Fatal编程技术网

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)