C ++ 11 constexpr для устаревшего шаблона метапрограммирования? - PullRequest
10 голосов
/ 29 февраля 2012

Насколько я понимаю, constexpr не является полным по Тьюрингу в отличие от шаблонного метапрограммирования, поэтому я считаю, что это не одно и то же. Поэтому вопрос в том, в какой степени constexpr делает метапрограммирование шаблонов устаревшим?

1 Ответ

22 голосов
/ 29 февраля 2012

constexpr абсолютно полный по Тьюрингу.Рекурсия разрешена.Это удобный способ определения функций, которые работают как во время компиляции, так и во время выполнения.constexpr функции, будучи простыми функциями, не могут выполнять операции над типами.(Конечно, если вы не используете метапрограммирование шаблонов для определения упомянутой функции.)

Оба шаблона классов и constexpr могут использоваться для хранения константных выражений во время компиляции, но на этом сходство заканчивается.Они не являются избыточными, и TMP не уйдет в ближайшее время.

Однако некоторые особенно уродливые вычисления во время компиляции могут быть более элегантно переписаны как правильные функции.

...