【问题标题】:initialize array size from another array value从另一个数组值初始化数组大小
【发布时间】:2011-01-03 23:47:10
【问题描述】:
#include<iostream> 
using namespace std; 

const int vals[] = {0, 1, 2, 3, 4}; 

int newArray[ vals[2] ]; //"error: array bound is not an integer constant"

int main(){
    return vals[2];
}

//returns 2 if erroneous line is removed

为什么这不起作用?

【问题讨论】:

    标签: c++ arrays initialization


    【解决方案1】:

    不幸的是,您不能在标准 C++ 中这样做,因为vals[2] 不是常量表达式!在即将到来的标准中,您将拥有 constexpr(在 g++ 4.6 中实现)轻松请求编译时评估:

    #include<iostream> 
    using namespace std; 
    
    constexpr int vals[] = {0, 1, 2, 3, 4}; 
    
    int newArray[ vals[2] ]; // vals[2] is a constant expression now!
    
    int main(){
        return vals[2];
    }
    

    【讨论】:

    • 第一句现在应该是“你可以在标准 C++ 中做到这一点(从 C++11 开始);你只能在 C++03 或早”(或类似的东西),如果我理解正确的话。
    【解决方案2】:

    const 表达式的值可能在编译时甚至是未知的。例如,您可以使用从函数返回的内容来初始化常量,例如

    const int size = rand(); // random size
    

    所以它并不是你想的那样那个常数

    【讨论】:

      【解决方案3】:

      C++ 编译器只能分配一个大小在编译时已知的数组。如果要分配可变大小的内存,请使用new 运算符。

      【讨论】:

      • 甚至更好,std::vector
      • 对我来说似乎是对其他问题的回答
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 2014-04-21
      相关资源
      最近更新 更多