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数值文字的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:数组[n]vs数组[10]-使用变量初始化数组vs数值文字


基础教程推荐
猜你喜欢
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- 设计字符串本地化的最佳方法 2022-01-01
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- C++,'if' 表达式中的变量声明 2021-01-01
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01