具有下限和上限的C ++数组定义?

时间:2014-12-04 15:16:54

标签: c++ arrays

我女儿的第12个标准C ++教科书说明了

  

数组的符号可以(也)给出如下:数组名称   [下界L,上界U]

这对我来说是一个惊喜。我知道Pascal有这个符号,但是C ++?从来没有见过这个。我在她规定的编译器(古老的Turbo C ++ 4.5)中编写了一个快速程序,并且不支持它。在Stanley Lippman的书中也没有找到这种语法。互联网搜索并未引发这种情况。或者我可能没有正确搜索?

那么,这是一个有效的声明吗?

2 个答案:

答案 0 :(得分:3)

不,这不是真的,除非有人重载了逗号运算符并且可能[],这是非常不可能的。 (Boost Spirit两者都有,但原因各不相同)。

根本没有任何重载,Array[x, y]在语法上是无效的,因为大小必须是常量表达式,并且这些不能包含逗号运算符;这样做会使它成为赋值表达式

把书烧掉,把Stroustrup放进她的圣诞袜里!

答案 1 :(得分:3)

这是无效的,从draft C++ standard部分8.3.4 数组声明必须是以下形式:

  

D1 [constant-expressionopt] attribute-specifier-seqopt

我们可以从5.19 常量表达式 常量表达式的语法:

constant-expression:
   conditional-expression

这个语法不允许我们去逗号运算符执行以下操作:

int a[ 1, 2 ] ;
        ^

正如其他人所暗示的那样,因为条件表达式没有逗号运算符的路径。虽然如果你添加括号,我们可以到逗号运算符,因为条件表达式允许我们到达 primary-expression ,它会让我们{{em> 1}}所以以下内容是有效的:

()

注意,在C ++ 03中,明确禁止在常量表达式中使用逗号运算符。