В моем понимании вычисление времени компиляции - это все, что может быть вычислено компилятором, а не той частью, которая вычисляется во время выполнения программы для повышения производительности. Итеративное вычисление возможно, когда программа выполняется, но во время компиляции не допускается. Один неприятный и конкретный пример - это шаблоны Variadic, в которых, естественно, рассматривается итерация для обработки различных типов, но стандарт и компиляторы заставляют программистов обрабатывать их рекурсивно.Возможность итерации для вычислений времени вычислений
В общем, все вычисления времени компиляции обрабатываются посредством рекурсии, а не итерации. Насколько я знаю, функции constexpr, ожидаемые для вычисления во время компиляции, также должны быть рекурсивными. Что делает итерацию запрещенной для всего, что компилируется?
Рекурсия - это форма итерации. – rici
Вы также можете использовать 'std :: integer_sequence' –
. Регулярная итерация теперь разрешена в C++ 14 для функции' constexpr'. Проблема состоит в том, чтобы проверить, что функция 'constexpr'. Это проще с рекурсией и без итераций. – Jarod42