Очевидно, мы не можем сделать все constexpr
. А если ничего не делать constexpr
, то больших проблем не будет. Пока много кода написано без него.
Но стоит ли вставлять constexpr
во что-нибудь, что может иметь его? Есть ли здесь потенциальная проблема?
Я склонен соглашаться с Scott Meyers на этом (что касается большинства вещей): "Используйте constexpr
каждый раз, когда возможный" (от Объекта 15 из Эффективный современный C++ ), особенно при обеспечении API для других для использования. Может быть действительно неутешительно, когда Вы хотите выполнить инициализацию времени компиляции с помощью функции, но не можете, потому что библиотека не объявила это constexpr
. Кроме того, все классы и функции являются частью API, используемый ли миром или просто Вашей командой. Так используйте его каждый раз, когда Вы можете, для расширения его объема использования.
// Free cup of coffee to the API author, for using constexpr
// on Rect3 ctor, Point3 ctor, and Point3::operator*
constexpr Rect3 IdealSensorBounds = Rect3(Point3::Zero, MaxSensorRange * 0.8);
Тем не менее constexpr
часть интерфейса, поэтому если интерфейс естественно не соответствует чему-то, что может быть constexpr
, не соглашайтесь на него, чтобы Вы не должны повреждать API позже. Таким образом, не фиксируйте constexpr
интерфейсу просто, потому что ток, только реализация может обработать его.