开发者社区> 问答> 正文

Array [n] vs Array [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]作品。

有人知道为什么吗? 问题来源于stack overflow

展开
收起
保持可爱mmm 2020-02-08 19:50:37 479 0
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 a(n); // Don't forget to #include 如果仍然需要合适的数组,则可以在创建它时使用一个常量,而不是一个变量:

    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

    2020-02-08 19:50:48
    赞同 展开评论 打赏
问答分类:
C++
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载