数组[n]vs数组[10]-使用变量初始化数组vs数值文字

Array[n] vs Array[10] - Initializing array with variable vs numeric literal(数组[n]vs数组[10]-使用变量初始化数组vs数值文字)
本文介绍了数组[n]vs数组[10]-使用变量初始化数组vs数值文字的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的代码有以下问题:

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++中更好地称为"动态大小数组",因为不允许使用适当的可变长度数组),您要么必须自己动态分配内存:

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

这篇关于数组[n]vs数组[10]-使用变量初始化数组vs数值文字的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Unknown type name __m256 - Intel intrinsics for AVX not recognized?(未知类型名称__M256-英特尔AVX内部功能无法识别?)
How can an declare an array in a function that returns an array in c++(如何在用C++返回数组的函数中声明数组)
Is it possible to define a class in 2 or more file in C++?(在C++中可以在两个或多个文件中定义一个类吗?)
Why can#39;t I create an array of automatic variables?(为什么我不能创建一个自动变量数组?)
zeromq: reset REQ/REP socket state(Zeromq:重置REQ/REP套接字状态)
Can I resize a vector that was moved from?(我可以调整从中移出的矢量的大小吗?)