Почему массивы переменной длины не являются частью стандарта 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
}

vector версия становится довольно неуклюжей:

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

Срезы, строки и столбцы также могут быть распространены по всей памяти.

Глядя на обсуждение вcomp.std.c++ ясно, что этот вопрос довольно спорный с некоторыми очень тяжелыми именами по обе стороны аргумента. Это, конечно, не очевидно, чтоstd::vector всегда лучшее решение.

Ответы на вопрос(1)

Ваш ответ на вопрос