在过去的几年里,我不怎么使用C。当我今天读这个问题时,我遇到了一些我不熟悉的C语法。
显然,在C99中,以下语法是有效的:
void foo(int n) {
int values[n]; //Declare a variable length array
}
这似乎是一个非常有用的功能。是否曾经讨论过将它添加到c++标准中,如果有,为什么省略了它?
一些潜在的原因:
编译器供应商难以实现 与标准的其他部分不兼容 功能可以用其他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
}
矢量版本变得相当笨拙:
void foo(int x, int y, int z) {
vector< vector< vector<int> > > values( /* Really painful expression here. */);
}
片、行和列也可能分布在整个内存中。
看看comp. stdc++上的讨论,很明显这个问题很有争议,争论双方都有一些重量级人物。当然,std::vector并不总是更好的解决方案。