I haven't used C very much in the last few years. When I read this question today I came across some C syntax which I wasn't familiar with.
Apparently in C99 the following syntax is valid:
void foo(int n) {
int values[n]; //Declare a variable length array
}
This seems like a pretty useful feature, does anyone now if there was ever a discussion on adding it to the C++ standard, and if so why it was omitted? Some potential reasons:
- Hairy for compiler vendors to implement
- Incompatible with some other part of the standard
- Functionality can be emulated with other C++ constructs
- ???
The C++ standard states that array size must be a constant expression (8.3.4.1)
Yes, of course I realize that in the toy example one could use std::vector<int> values(m);
but this allocates memory from the heap and not the stack. And if I want a multidimensional array like:
void foo(int x, int y, int z) {
int values[x][y][z]; //Declare a variable length array
}
the vector
version becomes pretty clumsy
void foo(int x, int y, int z) {
vector< vector< vector<int> > > values(/*really painful expression here*/);
}
The slices, rows and columns will also potentially be spread all over memory.
EDIT: Looking at the discussion at comp.std.c++
it's clear that this question is pretty controversial with some very heavyweight names on both sides of the argument. It's certainly not obvious that a std::vector
is always a better solution.