【发布时间】:2017-02-02 19:32:52
【问题描述】:
我正在尝试在 Visual Studio 2015 中运行我的代码,但在下一个代码被剪断时,我在 double x1[dim];上收到下一个错误expression must have a constant value。
double fitness(const double x[], const int &dim) {
double sum = 0.0;
double x1[dim];
...
return sum;
}
在g++ 4.8 上运行相同的代码没有错误。那么如何在 Visual Studio 2015 下做同样的事情呢。
我的编译器或代码实现有问题吗?
【问题讨论】:
-
使用 std::vector 或 std::valarray
-
我试图避免使用像 std::vector 或 std::array 这样的容器。
-
然后你可以使用动态数组(
new和delete),尽管我更喜欢 std::vector ,除非有非常编译的原因。顺便说一句,您的代码不起作用的原因是,可变长度数组,又名 VLA,是一个 c99 功能,默认情况下被 GCC 作为扩展支持(afaik GCC 的默认 C++ 方言选项是 -std=gnu++98 gcc 扩展已启用)。 MSVC 传统上对 C99 的支持很差,因此 MSVC 中可能不提供此语言功能。 -
g++ -Wall -std=c++14 -pedantic test.cpp不会编译上述代码,因为VLAs 不是 C++ 标准的一部分; C99 允许,但您应该为此使用gcc。
标签: c++