¿Por qué las matrices de longitud variable no forman parte del estándar de C ++?

No he usado mucho C en los últimos años. Cuando leoesta pregunta hoy me encontré con una sintaxis C con la que no estaba familiarizado.

Aparentemente enC99 La siguiente sintaxis es válida:

void foo(int n) {
    int values[n]; //Declare a variable length array
}

Esto parece una característica bastante útil. ¿Hubo alguna vez una discusión sobre agregarlo al estándar de C ++ y, de ser así, por qué se omitió?

Algunas posibles razones:

Peludo para los proveedores de compiladores para implementarIncompatible con alguna otra parte de la norma.La funcionalidad se puede emular con otras construcciones de C ++

El estándar de C ++ indica que el tamaño de la matriz debe ser una expresión constante (8.3.4.1).

Sí, claro que me doy cuenta de que en el ejemplo de juguete uno podría usarstd::vector<int> values(m);, pero esto asigna memoria del montón y no la pila. Y si quiero una matriz multidimensional como:

void foo(int x, int y, int z) {
    int values[x][y][z]; // Declare a variable length array
}

lavector la versión se vuelve bastante torpe:

void foo(int x, int y, int z) {
    vector< vector< vector<int> > > values( /* Really painful expression here. */);
}

Los segmentos, filas y columnas también se distribuirán en toda la memoria.

Mirando la discusión encomp.std.c++ está claro que esta pregunta es bastante controvertida con algunos nombres muy pesados ​​en ambos lados del argumento. Ciertamente no es obvio que unstd::vector Siempre es una mejor solución.

Respuestas a la pregunta(13)

Su respuesta a la pregunta