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

时间:2012-11-26 10:28:25

标签: 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无效。

3 个答案:

答案 0 :(得分:7)

嗯,您应该使用std :: fill_n()来执行该任务......

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

编辑:从这里拍摄:initialize a const array in a class initializer in C++

作为评论说,您可以使用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) {}
};

答案 1 :(得分:2)

不,不可能在C ++中这样做。但您可以使用std::fill算法来分配值:

int widths[101];
fill(widths, widths+10, 1);
fill(widths+10, widths+100, 2);
fill(widths+100, widths+101, 3);

它不那么优雅,但它有效。

答案 2 :(得分:1)

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