|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|||||||||||
Использование constexpr vs const25.02.2020, 00:39. Показов 1990. Ответов 11
Метки нет (Все метки)
Добрый вечер,
есть 2 кода: Первый:
а) при компиляции Release сборки с оптимизацией на выходе будет один и тот же код - значение FIXED_FPS и FIXED_DT подставятся в место использования, переменные не будут созданы, если их адрес никто не умудрился запросить.б) во втором случаи значение "переменной" FIXED_DT будет вычислена на момент компиляции и/или в рантайме, но время на рефакторинг этого места не стоит свеч.в) учитывая пункт выше: использование constexpr в таком простом кейсе избыточно и не привычно глазу(тут отсылка к использованию технологий не к месту). Как по мне у constexpr семантика более глубокая, чем применять/переписывать все месте, где до С++11 хватало и const.Вопрос: как бы написали эти 2 строки и почему?
0
|
|||||||||||
| 25.02.2020, 00:39 | |
|
Ответы с готовыми решениями:
11
В чем разница между const и constexpr?
int const * const foo(const int* param) const - разъясните значение квалификаторов |
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 25.02.2020, 00:47 | |
|
2
|
|
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
| 25.02.2020, 00:55 [ТС] | |
|
Вот еще к аргументам листинг кода:
const https://godbolt.org/z/7NDPYG constexpr https://godbolt.org/z/vopWsC они одинаковые на выходе
0
|
|
|
Неэпический
|
|
| 25.02.2020, 01:02 | |
|
rikimaru2013, по идее, они и должны быть одинаковые в данном контексте.
Но, const-объекты могут быть инициализированы и в рантайме динамически, тогда как объекты constexpr - это либо время компиляции, либо ошибка.
2
|
|
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
| 25.02.2020, 01:11 [ТС] | |
|
Croessmah, поэтому я хочу понять природу моего внутреннего недовольства, когда "пихают"
constexpr в места, где хватило бы и привычного const.Да возможно это "придырки", но одна из таких придирок запечатлена в https://github.com/isocpp/CppC... ependently и думаю многих с ней согласятся.
0
|
|
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
| 25.02.2020, 01:22 [ТС] | |
|
Croessmah, так подскажите ваши доводы в сторону
constexpr. Думаю вам не раз приходилось писать const до С++11. И тут приходит день, и вы начинаете писать по другому в тех же случаях - подскажите почему?
0
|
|
|
Неэпический
|
||||||||||||
| 25.02.2020, 01:39 | ||||||||||||
2
|
||||||||||||
|
225 / 189 / 98
Регистрация: 15.04.2018
Сообщений: 718
|
||||||
| 25.02.2020, 01:57 | ||||||
|
rikimaru2013, а посмотреть чуть поглубже? Это немного из разных миров, для меня const - как ограничение для программистов и облегчение жизни компилятору, а constexpr - это полные вычисления до этапа запуска (а-ля чтобы клиент миллионы раз не считал условное число пи, если ваш компилятор не соблаговолит собрать ваш продукт с нормальной оптимизацией const double pi = 22 / 7 к чему-то вроде const double pi = 3.14........, ибо компиляторы не идеальны, и могут скинуть всё на рантайм). Так же не стоит забывать про -O0 оптимизацию, в таком варианте const имеет явные отличия от constexpr
Добавлено через 4 минуты Я не так давно хотел решить одну задачу. Суть заключается в том, чтобы на этапе компиляции выявлять несоответствия количества аргументов и работать с std::get<std::size_t N>(std::tuple) не по цифрам, а по строкам. Сам код: https://github.com/mvngr/ForTe... r/main.cpp Надеюсь, что-нибудь будет понятно. Если очень захотите комментарии - пишите Добавлено через 3 минуты Croessmah, жаль, что только в последних стандартах появляются намеки на constexpr StringView и другие "базовые" типы языка, которыми мы пользуемся повседневно. Поэтому писать свои constexpr классы до 17 стандарта (по моему мнению) дикость и чистой воды боль.
0
|
||||||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|
| 25.02.2020, 09:47 | |
|
rikimaru2013, написал бы через constexpr, потому что этот тот же const только более строгий, что как я считаю отлично. Какраз подходит под всякие глобальные переменные. Ну и вы ничего не теряете, в рантайме constexpr будет превращён в обычный const.
2
|
|
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|
| 25.02.2020, 09:55 | |
Сообщение было отмечено rikimaru2013 как решение
Решение
А, ну и Скотт Мейерс, Современный и эффективный С++
Правило 15: «используйте constexpr везде где это возможно».
2
|
|
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|
| 25.02.2020, 09:57 | |
|
mvngr, ваш пример вообще о другом.
1
|
|
| 25.02.2020, 09:57 | |
|
Помогаю со студенческими работами здесь
12
Присваивание constexpr к non-constexpr Использование ключевого слова const
Что это bool operator== (const CLASS&) const; Const в параметрах. Перед чем нужно употребить const дабы обезопасить данные от изменения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|