同样的代码可以在g++中编译,但不能在VS中编译

Same code compiling in g++, but not in VS

本文关键字:编译 但不能 VS g++ 代码      更新时间:2023-10-16

我正试图在Visual Studio 2015中运行我的代码,并且我在下一个代码中获得expression must have a constant value上的double x1[dim];错误。

double fitness(const double x[], const int &dim) {
     double sum = 0.0;
     double x1[dim];
     ...
     return sum;
}

同样的代码在g++ 4.8上运行没有错误。那么我如何在Visual Studio 2015中做同样的事情呢?

是我的问题与编译器或代码实现?

double x1[dim];是可变长度数组。它不是标准的c++。

它在gcc上工作的原因是gcc有一个允许vla的扩展。VS2015没有,所以这就是为什么它不能编译(虽然它有自己的扩展集,只是不是那个)。

最好的选择是std::vector:

std::vector<double> x1(dim); //array of size dim

如果你不能使用,你仍然可以使用手动动态数组(尽管不推荐):

double* x1 = new double[dim];
delete[] x1; //Don't forget to delete it when you are done
//Alternatively, create a class which wraps the dynamic array, so you can use RAII

在过去,当我想在MSVC上使用VLA时,一个解决方法是每当我想要或需要在不支持VLA的编译器上使用VLA特性时使用alloca()

相关文章: