为什么在Visual Studio 2008中使用VC ++ 15编译此代码?
错误:C2057:预期的常量表达式,C2466:无法分配常量大小为0的数组。
void foo(int a, int b)
{
double arr[a][b]
...
}
虽然它在GCC 4.4中运行良好。我需要编译器之间的兼容性。
答案 0 :(得分:2)
为什么在Visual Studio 2008中这段代码不能用VC ++ 15编译?
因为C风格的可变长度数组不是C ++语言的一部分。 GCC将其作为非标准扩展提供;有些编译器没有。
我需要编译器之间的兼容性。
然后你需要一个动态数组,例如:
std::vector< std::vector<double> > arr(a, std::vector<double>(b));
或者,如果您希望所有元素都是连续的,就像它们在二维数组中一样:
std::vector<double> arr(a*b);
使用适当的算法在访问时计算索引。
答案 1 :(得分:1)
编译时编译器需要具有类的确切大小,您必须使用new运算符来动态分配内存,向量是此类操作的最佳选择。
有关更多信息,请参阅
http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html http://www.boost.org/doc/libs/1_39_0/libs/multi_array/doc/user.html