C++声明指针和数组放在同一行是否合法?

4
以下代码可以工作,但据说在gcc 3.4.2和Visual C++ 2010中无法编译,可能是不合法的:
int ar1[]{0,1,2,3,4,5,6,7,8,9},
    *ptr1 = ar1,
    ar2[]{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18},
    *ptr2 = ar2;

显然,您需要进行一些修改才能使其正常工作(大致如此):
int ar1[]{0,1,2,3,4,5,6,7,8,9};
int *ptr1 = ar1;
int ar2[]{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18};
int *ptr2 = ar2;

是这样的吗?数组和指针不能一起声明吗?

(在QT + gcc 4.8上编译代码可以正常通过)


5
为什么你需要这样的东西? - Caesar
10
这是C++11代码。gcc 3.4.2版本太旧,无法识别它。 - Vaughn Cato
11
@2013Asker 我猜这是一个自由的世界,你可以做你喜欢的事情,但是你需要知道这种代码会让你在下班后在停车场被同事揍一顿。 - Caesar
2
Visual C++ 2010也不支持统一初始化。VS2012也不支持;据报道,2013预览版支持。 - Igor Tandetnik
1
就我个人而言,我认为声明是为变量设置内存并定义变量类型。在这种意义上,数组和指针应该能够一起声明。然而,数组和指针是否应该能够在同一行上同时声明和赋值,则似乎是一个稍微不同的问题。如果有人说答案应该是肯定的,那么我希望他们问一下,在同一行上是否必须从右到左进行解析,或者我们应该使其可以在任何方向上工作。 - Terry
显示剩余4条评论
1个回答

15

所讨论的声明使用了C++11的初始化语法。从早期版本的C++编译器的角度来看,它在语法上并不正确。但是,如果在每个{前面添加=,它将成为普通且完全合法的C++98声明(也是C声明)。

在一个声明中使用几个声明符没有问题,即使你混合使用指针和数组声明符。如果愿意,你可以将函数声明符加入到其中。唯一的限制是你不能嵌入函数定义


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接