【发布时间】:2015-07-14 17:03:55
【问题描述】:
考虑以下数组声明:
int const a[5];
从语言的语义角度来看,它是否完全等同于const int a[5]?假设是这种情况,这两个声明基本上都会读作“a 是一个由 5 个常量整数组成的数组”。
读取第一个声明的另一种方法是“a is a constant array of 5 ints”。
显然,这两个语句在逻辑上都暗示整个数组是常量;如果一个数组由 5 个常量整数组成,那么整个数组都是常量。或者,如果整个数组是常数,那么它的所有值也是常数。
我知道“常量数组”的概念有点没有意义,因为数组不是可修改的左值(也就是说,它们不能出现在赋值的左侧)。但是,在任何情况下这两个声明会产生不同的行为吗?
(Cdecl.org 拒绝第一个声明为语法错误,而大多数当前编译器都接受它。)
编辑:
链接副本询问const 的顺序对于普通变量是否重要。使用数组,它有点混乱,所以我不认为这是重复的。
【问题讨论】:
-
可能是 stackoverflow.com/questions/7633776/… 的副本?无论如何,这并不意味着什么。
5在这里已经是一个常数。使用const int a[5];时,它会在C++中为您提供一个常量数组。请注意,这在C中不起作用(正确)!所以对于 C 来说,它几乎被忽略了。 -
"这里的 5 已经是一个常数。" ——无关紧要。 “这并不意味着什么”——错了。 “请注意,这在 C 中不起作用(正确)!” - 错误的。 “所以对于 C 来说,它几乎被忽略了。” - 错误的。您误解了您引用的问题(与此不同)和 Kerrick SB 的回答。
-
“但是,在任何情况下这两个声明会产生不同的行为吗?” -- 关键字顺序是 syntax 的问题 -- 它与语义无关。 “Cdecl.org 拒绝第一个声明为语法错误”——然后它就坏了。
-
C 声明从里到外读取。所以这表示
a是一个由 5 个 const int 组成的数组。更改顺序表示a是一个由 5 个 int const 组成的数组,这是没有意义的,但 C 允许您将 const 放在首位,因为语言设计者很困惑,并尽最大努力分散这种混乱。