在过去的几年里,我不怎么使用C。当我今天读这个问题时,我遇到了一些我不熟悉的C语法。
显然,在C99中,以下语法是有效的:
void foo(int n) {
int values[n]; //Declare a variable length array
}
这似乎是一个非常有用的功能。是否曾经讨论过将它添加到c++标准中,如果有,为什么省略了它?
一些潜在的原因:
c++标准规定数组大小必须是常量表达式(8.3.4.1)。
是的,当然我意识到在这个玩具示例中可以使用std::vector<int> values(m);
,但这是从堆而不是堆栈分配内存。如果我想要一个多维数组,比如:
void foo(int x, int y, int z) {
int values[x][y][z]; // Declare a variable length array
}
vector
版本变得相当笨拙:
void foo(int x, int y, int z) {
vector< vector< vector<int> > > values( /* Really painful expression here. */);
}
片、行和列也可能分布在整个内存中。
看看comp.std.c++
的讨论,很明显,这个问题在争论双方都有一些非常重量级的名字,是非常有争议的。当然,std::vector
并不总是更好的解决方案。