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

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

最佳答案

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

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

关于C++ 在同一行声明指针和数组是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17626176/

相关文章:

c++ - 在自定义 vector 类中重载求和运算符

c++ - unsigned int - 移位和 oring 产生负值

c++ - 在 Windows : Cannot open include file: 'Magick++.h' : No such file or directory 中编译 ZBar 示例时出错

c++ - 为什么 operator() 函数以不同的方式更好地对不同的容器进行排序

c++ - 从libuv句柄继承

c++ - 将成员函数指针转换为字符串

c++ - 记录数据时磁盘写入延迟

C++简单sizeof char数组和char指针的区别

c++ - 在类定义中调用成员构造函数

c++ - 构造函数在 C++ 和/或 C++11 中是线程安全的吗?