Почему массивы переменной длины не являются частью стандарта C ++?

У меня нетЯ очень много использовал C в последние несколько лет. Когда я читаюэтот вопрос сегодня я столкнулся с синтаксисом C, который я не былне знаком с.

Видимо вC99 следующий синтаксис действителен:

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

Это кажется довольно полезной функцией. Были ли когда-нибудь дискуссии о добавлении его в стандарт C ++, и если да, то почему он был опущен?

Некоторые потенциальные причины:

Волосатость для поставщиков компиляторов для реализацииНесовместим с какой-либо другой частью стандартаФункциональность можно эмулировать с другими конструкциями C ++

Стандарт C ++ утверждает, что размер массива должен быть постоянным выражением (8.3.4.1).

Да, конечно, я понимаю, что в примере с игрушкой можно использоватьstd::vector 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 > > values( /* Really painful expression here. */);
}

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

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

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

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