修饰变量的时候,可以把 constexpr 对象当作加强版的 const 对象。const 对象值不会改变,但不一定能够在编译期取得结果;constexpr 对象不仅值不会改变,而且保证能够在编译期取得结果。如果一个 const 变量能够在编译期求值,将其改为 constexpr 能够让代码更清晰易读。
constexpr 函数可以把运行期计算迁移至编译期,使得程序运行更快(但会增加编译时间)。但如果 constexpr 函数中存在无法在编译期求值的参数,则 constexpr 函数和普通一样在运行时求值,此时的返回值不是常量表达式。
尽管编译期运算会延长我们的编译时间,但是我们有些时候会用它来加快程序的运行速度。但是在使用时我们仍应该抱着谨慎的态度。太多的constexpr
让代码中充斥着不必要的关键字,影响可读性,而且要权衡编译期带来的好处和坏处。
目前我在函数中几乎没用过constexpr
,只对头文件中常用的枚举值和变量加了constexpr
,暂时不做太多分析了。