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 上编译良好)

4

1 回答 1

15

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

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

于 2013-07-13T02:10:28.967 回答