为了账号安全,请及时绑定邮箱和手机立即绑定

Array [n] vs Array [10] - 初始化具有变量与实数的数组

Array [n] vs Array [10] - 初始化具有变量与实数的数组

守候你守候我 2019-07-26 15:59:47
Array [n] vs Array [10] - 初始化具有变量与实数的数组我的代码出现以下问题: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]作品。谁知道为什么?
查看完整描述

2 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

在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


查看完整回答
反对 回复 2019-07-26
  • 2 回答
  • 0 关注
  • 720 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信