Насколько я понимаю, constexpr можно рассматривать как подсказку для компилятора, чтобы проверить, могут ли данные выражения оцениваться во время компиляции и делать это, если это возможно.Почему constexpr не является автоматическим?
Я знаю, что это также налагает некоторые ограничения на функцию или инициализацию, объявленную как constexpr, но конечной целью является оценка времени компиляции, не так ли?
Итак, мой вопрос: почему мы не можем оставить это в компиляторе? Очевидно, что он способен проверять предварительные условия, поэтому почему он не делает для каждого выражения и не оценивает время компиляции, когда это возможно?
У меня есть две идеи о том, почему это может быть так, но я не уверен, что они попали в точку:
а) Это может занять слишком много времени во время компиляции.
b) Поскольку мой код может использовать функции constexpr в местах, где нормальные функции не будут разрешены, спецификатор также является частью декларации. Если компилятор сделал все сам по себе, можно использовать функцию в определении C-массива с одной версией функции, но со следующей версией может быть ошибка компилятора, поскольку предварительные условия для оценки времени компиляции не являются более удовлетворены.
Возможный дубликат [Почему нам нужно отмечать функции как constexpr?] (Http://stackoverflow.com/questions/14472359/why-do-we-need-to-mark-functions-as-constexpr) –
@Bartek: Конечно, я прочитал этот. Но насколько я понимаю, это не то, что вы автоматически применяете Constexpr, где он подходит. Или это? –