如何使用gcc工具链在c++11中只初始化全局数组的几个元素

How to initialize only a few elements of a global array in c++11 with gcc toolchain?

本文关键字:数组 元素 几个 全局 初始化 工具 gcc 何使用 c++11      更新时间:2024-05-09

我有以下代码:

#include <iostream>
int array[10] = {
[2] = 200,
[5] = 500
};
int main() {
std::cout << "Hello World!n";
std::cout << array[5];
return 0;
}

当我用g++ -std=c++11 -o main main.cpp编译时,我得到以下错误:

main.cpp:6:1: sorry, unimplemented: non-trivial designated initializers not supported
};
^
main.cpp:6:1: sorry, unimplemented: non-trivial designated initializers not supported

有没有办法用g++来做这个?Clang工作得很好。

这是C的一个称为指定初始化程序的功能,在标准C++中不可用。因此,虽然一些编译器可能允许将其作为扩展,但它不是语言的一个特性(因此不可移植(。

现在我不知道你的实际数组是否会比这更复杂,但如果不是,你可以使用

int array[10] = { 0, 0, 200, 0, 0, 500 };

与其他文章提到的一样,用于该数组的语法来自C,而不是标准C++。

但是,如果您在global中声明了一个大数组,并且只想指定几个值,那么您可以执行以下操作:

int array[500];
int main()
{
array[2] = 200;
array[5] = 500;
}

通过在global中声明数组,它将在编译时完成,因此它将使所有成员初始化为0