Вопрос

Я всегда думал, что массивы переменной длины не допускаются в 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 поддерживает его как расширение .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top