Разрешено ли создание массивов с границами времени выполнения в c ++? - PullRequest
0 голосов
/ 05 октября 2018

Согласно C ++: создание массива с размером, введенным пользователем Создание массивов с границами времени выполнения не разрешено в C ++.

Но ниже приведен код, скомпилированный без ошибок.

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {


    int n;
    cin>>n;

    int a[n][n];
    a[n-1][n-1]=9;
    cout<<a[n-1][n-1]<<endl;

    return 0;
}

и тоже отлично работает.проверьте это здесь -> http://cpp.sh/6bies

Может ли кто-нибудь помочь разрешить эту путаницу?.

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Допускается ли создание массивов с допустимыми пределами выполнения в c ++?

Такие массивы некорректны.

Но ниже приведен код, скомпилированный без ошибок.... и тоже отлично работает.

Стандарт C ++ не запрещает компиляторам успешно компилировать некорректно созданные программы.Достаточно показать диагностическое сообщение.Это позволяет компиляторам расширять язык.

Если вы посмотрите на выходные данные компилятора вашего примера, вы обнаружите, что компилятор сказал вам об этом, как того требует стандарт C ++:

15:15: warning: array of array of runtime bound [-Wvla]

Итак, похоже, что ваш компилятор поддерживает массивы привязки времени выполнения - и даже массивы массивов привязки времени выполнения - как расширение языка.

Большинство компиляторов могут бытьпредлагается отказаться от программ, которые плохо сформированы в соответствии со стандартом C ++, если вы того пожелаете.


Стандартно совместимо создание массивов с ограничением времени выполнения в динамическом хранилище .Самый простой способ - использовать std::vector.

0 голосов
/ 05 октября 2018

Если вы используете gcc, у него есть несколько расширений, одним из которых является поддержка массивов переменной длины (VLA), доступных в C99.

...