#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
为什么这个不起作用?
#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++中你无法这样做,因为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];
}
const
表达式的值在编译时可能不为已知。比如,你可以用函数返回值初始化一个常量,例如:
const int size = rand(); // random size
所以它并不像你想象的那样始终如一
C++编译器只能在编译时分配一个已知大小的数组。如果您想分配一个变量大小的内存块,请使用new
运算符。
std::vector
。 - Ben Voigt