Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > constexpr


Автор: Ilya83 6.1.2014, 21:02
Есть Константы, есть макросы. Зачем придумали constexpr?? На форуме нашел, как чел выпендривается тем, что он может вычислить факториал на этапе компиляции Для этого???  smile Сразу сюда вопрос: как мне в настройках IDE прописать, чтобы С++11 работал? (windows 7, QT Creator) 

Автор: disputant 7.1.2014, 09:26
Ну, например, знаете такую функцию - 
Код
numeric_limits<short>::max()
. По факту - константа, но использовать как константу - нельзя, не поймет компилятор! А если объявить как constexpr - пожалуйста, можно описать, скажем, массив 
Код
array<float,std::numeric_limits<short>::max()> a
.

Ну, а вычислять факториал на уровне компиляции можно и с помощью шаблонов - как два байта переслать smile


Автор: vinter 7.1.2014, 09:41
Можешь посмотреть http://scrutator.me/post/2013/11/19/constant_expressions.aspx статью, я там привёл некоторые причины, которые объясняют преимущества constexpr. 

Автор: Ilya83 7.1.2014, 10:02
vinter, Хах дааа! Вот на чем я застрял! Попытка определить константу в классе. Подскажите, как мне использовать constexp ? Мой компилятор MinGW говорит, что я должен явно указать, что хочу использовать C++11 (windows, qt Creator) 

Автор: Ilya83 7.1.2014, 10:20
Проблема решена! Добавил QMAKE_CXXFLAGS += -std=c++11 в .pro файл. Всем спасибо Но свой пример я так и не нашел. Везде пишут про конструктор или функцию Тогда тут что:

Код

constexpr int windowWidth{800}, windowHeight{600};

...................

RenderWindow window{windowWidth, windowHeight};


???????

Автор: akizelokro 7.1.2014, 18:58
..долгополз

.. дыры затыкают ввиду всякой непродуманности и непоследовательности. Зато зашибись! С рулез! форевер!

А я прочитал ещё про пару GCC extensions, вообще крутяк.
Здеся вообщ проблемы, что в первом стандарте конструкции типа throw и ряд подобных ввобще не выдержали проверки действительной реальностью.

"И это бывает.."

Автор: vinter 7.1.2014, 20:09
Ilya83, я не очень понимаю твой вопрос. В твоём случае constexpr значит тоже самое, что const

Автор: akizelokro 7.1.2014, 20:27
Сегодня же выползли из другой темы, где внутри объявления структуры можно было инициализировать/задавать только const static члены структуры. Небось в своё время возник вопрос, а почему такая несправедливость?
И тут проявилось наследие С, что если проблема навзничь не решается, - она должна быть решена по любому.

IMPORTANT***==========================================
C++ по подходу даже не выход к ООП, а лишь средство индустриализации С. Но при этом в ООП не стоит задача кроме самореализации, а у С была изначально задача решать все задачи.

Автор: Ilya83 7.1.2014, 21:56
Цитата

я не очень понимаю твой вопрос.


Дык вот и я о том же!!! Все норм. люди делают константы. Только Сишникам надо обязательно выя.....ца. Написать код в 1-ну строчку, понаделать #defineов, пол кода выполнить на этапе компиляции. Потом это выложить в сеть дескать Вот зыкайте какой я мля кодер продвинутый  smile  (извиняюсь Накипело)

Автор: akizelokro 7.1.2014, 22:43
Цитата(Ilya83 @  7.1.2014,  21:56 Найти цитируемый пост)
Дык вот и я о том же!!! Все норм. люди делают константы. Только Сишникам надо обязательно выя.....ца. Написать код в 1-ну строчку, понаделать #defineов, пол кода выполнить на этапе компиляции. Потом это выложить в сеть дескать Вот зыкайте какой я мля кодер продвинутый  smile  (извиняюсь Накипело) 


Все эти и ещё куча других трюков реализуются на ассемблере. Сшник есть средство перейти в усечённое множество трюков с одной целью - попытаться реализовать все (почти всё), что можно сделать на асме. Только немного быстрее. Но на этом, фактически, написана вся индустрия.
И тут остаётся только преклонить голову перед разнообразием жизни и признать как данное её самоё.

Добавлено через 10 минут и 23 секунды
Хотя с переходом к усечённому множество трюков не ахти как "успешно" получается. Тной раз подумаешь, что и ООП весь один большой трюк.

Добавлено через 12 минут и 52 секунды
Кстати, кто-то из известных штатовцев засел в Microsoft, чтобы привести VC++ к стандарту. Но позавчера читал, что реализовано в VS2013, так шести пунктов (или 7) из стандарта ещё нет. Список щас не приведу.

Автор: Ilya83 7.1.2014, 23:12
Просто надо создать новый язык с++ А вся новизна в том, чтобы убрать все совместимости с пред. стандартами. Раздражает эта салянка Все, как хотят так и пишут. Вывод строки на экран (например) Кто scanf, кто printf, кто cout, кто............ Может выберете уже что-то одно???!!!  smile 

Автор: disputant 8.1.2014, 09:15
Цитата(Ilya83 @ 7.1.2014,  23:12)
Может выберете уже что-то одно???!!!  smile

Гм, каждый выбирает то, что ему больше подходит.
Как раз этим C++ и приятен, помимо прочего - богатством выбора.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)