如何以C ++ 11样式初始化数组?

时间:2015-06-28 16:07:01

标签: c++ c++11 gcc

This answer说C ++ 11具有新功能,允许我们初始化“可变大小的数组”,如下所示:

auto array = new double[M][N]();

但是当我尝试这样做时,我得到以下错误:

array size in new-expression must be constant

我没有忘记在.pro文件中添加-std=c++0x。我测试了另一个C ++ 11功能,它运行得很好。

他错了吗?还是我?

感谢。

1 个答案:

答案 0 :(得分:2)

C ++没有这种不受限制的运行时大小的数组。 C ++ 11引入了类似于C VLA的远程功能,但它受到的限制非常有限。您不允许在C ++中使用VLA的VLA,这意味着C ++中任何多维数组的第二,第三和更多维度必须是常量表达式。

显然,这是您违反的要求。你的N不是一个常数表达式。

在任何情况下,您的问题标题都涉及初始化,而实际上您遇到的问题与初始化无关。您使用的初始化语法 - () - 对于C ++ 11来说并不新鲜,它自第一语言标准以来就存在于C ++中。

代码中唯一的C ++ 11功能是auto的上述用法。但它与初始化或数组无关。