C ++在初始化程序中指定数组索引,如C
我之前使用过C(嵌入式东西),我可以像这样初始化我的数组:
int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
即我可以在初始化程序中指定索引。 目前我正在学习Qt/C++
,我无法相信这在C ++中是不受支持的。
我有这个选项: -std=gnu++0x
,但无论如何它都不受支持。 (我不知道它是否在C ++ 11中受支持,因为Qt在gcc 4.7.x中工作有问题)
那么,它真的不支持C ++吗? 或者也许有办法启用它?
UPD:目前我想初始化const数组,所以std::fill
不起作用。
嗯,你应该使用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 v; public: C():v(a, a+N) {} };
不,不可能在C ++中这样做。 但是您可以使用std :: fill算法来分配值:
int widths[101]; fill(widths, widths+10, 1); fill(widths+10, widths+100, 2); fill(widths+100, widths+101, 3);
它不是那么优雅,但它有效。
多年以后,我偶然测试了它,我可以确认它在g++ -std=c++11
,g ++版本是4.8.2。