12

我以前使用过 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不起作用。

4

3 回答 3

7

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

如此处所述http://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html指定的初始化(扩展)未在 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) {}
};
于 2012-11-26T10:32:13.093 回答
3

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

于 2015-08-23T14:34:31.687 回答
2

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

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

它没有那么优雅,但它确实有效。

于 2012-11-26T10:33:14.293 回答