initialize array size from another array value

后端 未结 3 1465
难免孤独
难免孤独 2020-12-18 09:48
#include 
using namespace std; 

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

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

         


        
相关标签:
3条回答
  • 2020-12-18 10:06

    It's possible that the value of a const expression is not even known at compile time. For example, you can initialize a constant with something returned from a function, like

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

    So it is not that constant as you might think

    0 讨论(0)
  • 2020-12-18 10:21

    The C++ compiler can only allocate an array with a size known at compile time. If you want to allocated a variable size piece of memory, use the new operator.

    0 讨论(0)
  • 2020-12-18 10:27

    Unfortunately you can't do that in standard C++ because vals[2] is not a constant expression! In the coming standard you would have constexpr(implemented in g++ 4.6) to request compile-time evaluation easily:

    #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];
    }
    
    0 讨论(0)
提交回复
热议问题