Утверждение, что что-то может быть вычислено во время компиляции - это довольно сильный тип оптимизации.
Встраивание просто удаляет вызов функции, копируя / вставляя тело функции в вызовсайт.Тело функции все еще должно быть выполнено, вы просто сохраняете накладные расходы при вызове функции.
Но если вы сделаете тот же код, который будет оцениваться во время компиляции, он будет свободен во время выполнения,
Но ни inline
, ни constexpr
не являются в первую очередь об оптимизации.Основная цель inline
состоит в подавлении правила одного определения, чтобы функции могли быть определены в заголовках (что полезно для шаблонов и, кстати, также облегчает оптимизацию встраивания)
И constexpr
есть, потому что он полезен в метапрограммировании, и, кстати, он может помочь компилятору лучше оптимизировать код, перенеся больше вычислений во время компиляции.