30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 615
|
|||||||||||
1 | |||||||||||
Compile-time и run-time методы и функции24.08.2016, 13:51. Показов 2666. Ответов 5
Метки нет (Все метки)
Добрый день.
Есть две функции, которые делают идентичную работу:
Будет ли такой вызов оптимизирован (посчитан) на этапе компиляции?
0
|
24.08.2016, 13:51 | |
Ответы с готовыми решениями:
5
Вывод возвращаемого типа функции в run time Compile - time алгоритмы Не могу разобраться с заданием "Создайте класс Time с конструкторами Time(), Time( int hour)......" Compile-time алгоритмы. сборник |
18767 / 9779 / 2393
Регистрация: 30.01.2014
Сообщений: 17,164
|
|||||||||||
24.08.2016, 13:55 | 2 | ||||||||||
Оставляешь одну constexpr версию.
1
|
30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 615
|
|
24.08.2016, 14:00 [ТС] | 3 |
Аналогичный вопрос и про функции/методы, которые принимают переменное кол-во аргументов: их можно написать с помощью variadic template рекурсивно и аля prinft.
Данные, которые будут передавать в них известны на этапе компиляции. Будет ли рекурсия посчитана сразу? Добавлено через 3 минуты О, быстро же Вы ответили, не успел вторую часть дописать. Собственно причина вопроса: иногда аргументы функции я знаю заранее. А иногда они определяются во время работы приложения. Следовательно, по идеи, нужно в коде иметь две версии функции compile-time и run-time. В первом случае использовать compile-time, а во втором - run-time. Или все-таки можно ограничится run-time версией, чтобы не перегружать код (класс) еще одним методом/функцией?
0
|
18767 / 9779 / 2393
Регистрация: 30.01.2014
Сообщений: 17,164
|
|
24.08.2016, 14:04 | 4 |
Ну я же тебе ответил.
constexpr функция будет вести себя как compile-time функция, если это возможно, и как обычная runtime-функция в остальных случаях. Вычислимость на этапе компиляции я тебе показал как проверить, дерзай. Добавлено через 1 минуту Плюс к этому, некоторые операции могут быть оптимизированы, даже если они имеют runtime природу. Например недостижимые ветки if, холостые циклы, короткие циклы могут быть развернуты, функции встроены и т.п. Конкретно что получилось лучше смотреть в ассемблерном выхлопе.
0
|
30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 615
|
|||||||||||
24.08.2016, 16:11 [ТС] | 5 | ||||||||||
Не обратил внимание на сигнатуру функции.
Тогда получается лучше всегда писать ключевое слово "constexpr" для всех функций. А если функция заведомо не constexpr (например содержит cout)? Например:
Вызов:
К сожалению, дизассемблированную программу не понимаю по большей части, поэтому сказать так или нет не могу.
0
|
18767 / 9779 / 2393
Регистрация: 30.01.2014
Сообщений: 17,164
|
|
24.08.2016, 16:17 | 6 |
Такого рода функциии в релизе будут встроены, все это развернется просто в ряд вызовов операций вывода.
Даже без constexpr. Тогда тебе будет очень сложно оценивать реальное положение вещей, к сожалению.
0
|
24.08.2016, 16:17 | |
Помогаю со студенческими работами здесь
6
Разница в координатах в run-time и design-time Разница в координатах в run-time и design-time Const в delay.h: compile time integer constant Выделение памяти объёмом, известном в compile-time Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |