我女儿的第12个标准C ++教科书说明了
数组的符号可以(也)给出如下:数组名称 [下界L,上界U]
这对我来说是一个惊喜。我知道Pascal有这个符号,但是C ++?从来没有见过这个。我在她规定的编译器(古老的Turbo C ++ 4.5)中编写了一个快速程序,并且不支持它。在Stanley Lippman的书中也没有找到这种语法。互联网搜索并未引发这种情况。或者我可能没有正确搜索?
那么,这是一个有效的声明吗?
答案 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中,明确禁止在常量表达式中使用逗号运算符。