Russian Qt Forum
Ноябрь 23, 2024, 20:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Объявление массива переменной  (Прочитано 5592 раз)
romsuhov
Гость
« : Декабрь 11, 2011, 23:01 »

Здравствуйте!
Возникла такая ситуация. Я всегда думал, что в C++ объявлять массив переменной запрещено, то есть такой код
Код:
int b;
cin>>b;
int m[b];
компилироваться не будет.
В компиляторе Visual C++ он и не компилируется, ругаясь на то, что размер массива - не константа.
Но когда я компилирую этот код в g++, он нормально компилируется.
Я ни у кого толком не смог выяснить, допустимо это в С++ и почему так происходит.
Всё, что мне удалось узнать, это то, что в Си, стандарт С99 инициализация массива переменной разрешена.
B g++ я даже явно указывал язык, т.е.
Код:
g++ -x c++ filename.cpp
Собственно, хотел спросить, что вы думаете по этому поводу, надеюсь, кто-нибудь сможет всё объяснить.
Записан
BRE
Гость
« Ответ #1 : Декабрь 11, 2011, 23:29 »

Это расширение gcc. Сейчас, вроде, это уже в новом стандарте (в драфте вроде было точно).

Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #2 : Декабрь 12, 2011, 02:32 »

Да, такая возможность в C++11 есть. См. ключевое слово "constexpr". Оно позволяет использовать в подобных выражения не только переменные, но и функции. Но есть ряд ограничений, советую ознакомиться с ними
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Декабрь 12, 2011, 07:46 »

А лучше использовать std::vector.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
romsuhov
Гость
« Ответ #4 : Декабрь 12, 2011, 18:10 »

BRE
Спасибо!
pastor
Да, про constexpr я слышал, но толком ещё не разбирался с ним и прочими штуками нового стандарта.
Пантер
Ну это-то да, просто всё таки хотел разобраться Улыбающийся
Записан
Tonal
Гость
« Ответ #5 : Декабрь 21, 2011, 10:14 »

Да, такая возможность в C++11 есть. См. ключевое слово "constexpr". Оно позволяет использовать в подобных выражения не только переменные, но и функции. Но есть ряд ограничений, советую ознакомиться с ними
Не, constexpr подставлять значения вычисленные на этапе компиляции.
А в обсуждаемом случае значение переменной известно только на этапе выполнения.
Это довольно старое расширение gcc сделанное через неявный вызов alloca.
Но вот в С++11 оно мне не попадалось - может проглядел. Улыбающийся
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #6 : Декабрь 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.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.211 секунд. Запросов: 23.