从另一个数组值初始化数组大小

6
#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

为什么这个不起作用?

3个回答

12

很遗憾,在标准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或更早版本中是不行的”。 - ShreevatsaR

8

const 表达式的值在编译时可能不为已知。比如,你可以用函数返回值初始化一个常量,例如:

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

所以它并不像你想象的那样始终如一


5

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


7
甚至更好的是,std::vector - Ben Voigt
3
在我看来,这似乎是针对其他问题的答案。 - Roman L

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接