Название: Объявление массива переменной Отправлено: romsuhov от Декабрь 11, 2011, 23:01 Здравствуйте!
Возникла такая ситуация. Я всегда думал, что в C++ объявлять массив переменной запрещено, то есть такой код Код: int b; В компиляторе Visual C++ он и не компилируется, ругаясь на то, что размер массива - не константа. Но когда я компилирую этот код в g++, он нормально компилируется. Я ни у кого толком не смог выяснить, допустимо это в С++ и почему так происходит. Всё, что мне удалось узнать, это то, что в Си, стандарт С99 инициализация массива переменной разрешена. B g++ я даже явно указывал язык, т.е. Код: g++ -x c++ filename.cpp Название: Re: Объявление массива переменной Отправлено: BRE от Декабрь 11, 2011, 23:29 Это расширение gcc. Сейчас, вроде, это уже в новом стандарте (в драфте вроде было точно).
Название: Re: Объявление массива переменной Отправлено: pastor от Декабрь 12, 2011, 02:32 Да, такая возможность в C++11 есть. См. ключевое слово "constexpr". Оно позволяет использовать в подобных выражения не только переменные, но и функции. Но есть ряд ограничений, советую ознакомиться с ними
Название: Re: Объявление массива переменной Отправлено: Пантер от Декабрь 12, 2011, 07:46 А лучше использовать std::vector.
Название: Re: Объявление массива переменной Отправлено: romsuhov от Декабрь 12, 2011, 18:10 BRE
Спасибо! pastor Да, про constexpr я слышал, но толком ещё не разбирался с ним и прочими штуками нового стандарта. Пантер Ну это-то да, просто всё таки хотел разобраться :) Название: Re: Объявление массива переменной Отправлено: Tonal от Декабрь 21, 2011, 10:14 Да, такая возможность в C++11 есть. См. ключевое слово "constexpr". Оно позволяет использовать в подобных выражения не только переменные, но и функции. Но есть ряд ограничений, советую ознакомиться с ними Не, constexpr подставлять значения вычисленные на этапе компиляции.А в обсуждаемом случае значение переменной известно только на этапе выполнения. Это довольно старое расширение gcc сделанное через неявный вызов alloca. Но вот в С++11 оно мне не попадалось - может проглядел. :) Название: Re: Объявление массива переменной Отправлено: pastor от Декабрь 21, 2011, 16:59 Да, Tonal, ты прав. Память подвела меня.
Цитировать C++11 introduced the keyword constexpr, which allows the user to guarantee that a function or object constructor is a compile-time constant. |