Разница между constexpr и обычной функцией на этапе компиляции заключается в том, что constexpr указывает, что значение или возвращаемое значение является константой и, по возможности, вычисляется во время компиляции. 2
Если значения параметров возможно посчитать на этапе компиляции, то возвращаемое значение также должно посчитаться на этом этапе. 5 Если значение хотя бы одного параметра будет неизвестно на этапе компиляции, то функция будет запущена в runtime (а не будет выведена ошибка компиляции). 5
Обычные функции, в свою очередь, создают значение во время выполнения. 2
Таким образом, использование constexpr помогает программе быстрее выполняться и использовать меньше памяти, так как значение вычисляется во время компиляции вместо времени выполнения. 2