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

时间:2013-07-13 01:43:02

标签: c++

以下代码有效但我被告知它不能使用Visual C ++ 2010使用gcc 3.4.2进行编译,并且可能是非法的:

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上编译正确)

1 个答案:

答案 0 :(得分:15)

有问题的声明使用C ++ 11初始化语法。从前C ++ 11编译器的角度来看,它在语法上是不正确的。但是如果你在每个=之前添加一个{它将成为普通且完全合法的C ++ 98声明(以及C声明)。

即使混合使用指针和数组声明符,在一个声明中使用多个声明符也没有问题。如果您愿意,可以将函数声明符添加到该混合中。唯一的限制是你不能在那里嵌入函数 definitions