阵列[N]对数组[10] - - - 初始化数组变量VS实数阵列[N]对数组[10] -

2019-05-06 05:22发布

我有我的代码了以下问题:

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]的作品。

任何人都知道为什么吗?

Answer 1:

在C ++中,可变长度数组是不合法的。 G ++允许以此为“扩展”(因为C允许的话),所以在G ++(而不-pedantic约以下C ++标准),可以这样做:

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

如果希望有一个“可变长度数组”(更好称为“动态大小的数组”在C ++中,由于适当的可变长度数组是不允许的),则要么必须自己动态分配存储器:

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>

如果你仍然想一个适当的数组,你可以使用一个常量 ,不是一个变量 ,当创建它:

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


文章来源: Array[n] vs Array[10] - Initializing array with variable vs real number