Array vs Array – 用variables和实数初始化数组

我的代码有以下问题:

int n = 10; double tenorData[n] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 

返回以下错误:

 error: variable-sized object 'tenorData' may not be initialized 

而使用double tenorData[10]作品。

任何人知道为什么

在C ++中,变长数组是不合法的。 G ++允许将其作为“扩展”(因为C允许),所以在G ++中(不需要遵循C ++标准),可以这样做:

 int n = 10; double a[n]; // Legal in g++ (with extensions), illegal in proper C++ 

如果你想要一个“可变长度数组”(在C ++中更好地称为“dynamic大小的数组”),因为不允许使用适当的可变长度数组),你必须自己dynamic分配内存:

 int n = 10; double* a = new double[n]; // Don't forget to delete [] a; when you're done! 

或者,更好的是,使用标准容器:

 int n = 10; std::vector<double> a(n); // Don't forget to #include <vector> 

如果你仍然想要一个正确的数组,你可以在创build时使用常量而不是variables

 const int n = 10; double a[n]; // now valid, since n isn't a variable (it's a compile time constant) 

同样的,如果你想从C ++ 11的函数中获取大小,你可以使用一个constexpr

 constexpr int n() { return 10; } double a[n()]; // n() is a compile time constant expression