Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 数组[n]vs数组[10]-使用变量vs实数初始化数组_C++_Arrays_Initialization_Size - Fatal编程技术网

C++ 数组[n]vs数组[10]-使用变量vs实数初始化数组

C++ 数组[n]vs数组[10]-使用变量vs实数初始化数组,c++,arrays,initialization,size,C++,Arrays,Initialization,Size,我的代码有以下问题: 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++中(不被代码> -PoandNo.下面的C+

我的代码有以下问题:

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++中(不被代码> -PoandNo.<代码>下面的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>
类似地,如果要从C++11中的函数中获取大小,可以使用
constexpr

constexpr int n()
{
    return 10;
}

double a[n()]; // n() is a compile time constant expression

这将有助于提供一种语言。在C++中,你的数组的形式需要有编译时常数大小。C++,使用代码块与明文32-G++编译器!谢谢,贾斯汀和@AndrewVarnerin,解决了这个问题!在int之前添加const:const int n=10;解决了的!谢谢,这是另一个很好的解决方案。我最终真正需要的是向量而不是数组@msmf14:是的,标准容器,如
vector
,非常有用。当您调用“std::vector a(n);”时,向量解决方案是否初始化每个元素?如果您没有分配太多(如果与堆栈大小相比它很小),我更喜欢使用带有alloca(3)和新位置的堆栈内存。这样你就不必担心释放内存,而且内存分配要快得多。因为我没有观察到这个错误,这就解释了差异。
constexpr int n()
{
    return 10;
}

double a[n()]; // n() is a compile time constant expression