我有以下代码:
#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
。