Переменная длина массивов там в C ++?
-
21-12-2019 - |
Вопрос
Я всегда думал, что массивы переменной длины не допускаются в C ++ (см.: Почему aren 'T Переменные массивы длины Часть стандарта C ++? ). Но почему этот код компилирует и работает?
#include <iostream>
using namespace std;
int main () {
int n;
cin >> n;
int a[n];
for (int i=0; i<n; i++) {
a[i] = i;
}
for (int i=0; i<n; i++) {
cout << a[i] << endl;
}
}
. Решение
Текущий стандарт C ++ не требует, чтобы компиляторы VLAS.Однако поставщики компилятора разрешены поддерживать VLAS в качестве расширения.
Первоначально было предложено, чтобы VLAS появился в C ++ 14, однако предложение не удалось.Они могут вернуться к C ++ 17.Другие советы
C99 Разрешает VLA, но C ++ никогда не позволяет, потому что производительность VLA настолько недружественно.А в C11 VLA становится дополнительной функцией.
Раньше, говорится, что VLA появится на C ++ 17.Но теперь C ++ 17 публикуется, и нет VLA, либо.(И кажется, что C ++ 20 не будет иметь VLA. Недавние документы вообще не говорили.)
Хотя стандарт не поддерживает его, компилятор GNU поддерживает его как расширение .