C++在初始化程序中指定数组索引,如C

Dmi*_*ank 10 c c++

我之前使用过C(嵌入式东西),我可以像这样初始化我的数组:

int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
Run Code Online (Sandbox Code Playgroud)

即我可以在初始化程序中指定索引.目前我正在学习Qt/C++,我无法相信这在C++中是不受支持的.

我有这个选项:-std=gnu++0x,但无论如何它不受支持.(我不知道它是否在C++ 11中受支持,因为Qt在gcc 4.7.x中工作有问题)

那么,它真的不支持C++吗?或者也许有办法启用它?

UPD:目前我想初始化const数组,所以std::fill不行.

Naj*_*ero 7

嗯,你应该使用std :: fill_n()来完成那个任务......

如此处所述http://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html指定的inits(扩展名)未在GNU C++中实现

编辑:从这里开始:在C++中的类初始化程序中初始化一个const数组

正如评论所说,你可以使用std:vector来获得所需的结果.你仍然可以用另一种方式强制执行const并使用fill_n.

int* a = new int[N];
// fill a

class C {
  const std::vector<int> v;
public:
  C():v(a, a+N) {}
};
Run Code Online (Sandbox Code Playgroud)


Dmi*_*ank 3

多年后,我偶然测试了它,我可以确认它可以在 中运行g++ -std=c++11,g++ 版本是 4.8.2。