constexpr

当使用 constexpr 声明一个对象或函数时,意味着它的值或结果可以在编译时计算,而不是在运行时。这允许进行性能优化,并使得常量可以在需要编译时值的上下文中使用。

1
2
3
constexpr int mf = 20; // 20 is a constant expression
constexpr int limit = mf + 1; // mf + 1 is a constant expression
constexpr int sz = size(); // ok only if size is a constexpr function

constexpr 对象和函数隐式地是 const 的

constexpr 函数

constexpr 函数必须有返回值,返回类型必须是字面类型(算术类型,引用,指针等)

1
constexpr size_t scale(size_t cnt) { return new_sz() * cnt; }

假如 scale 函数传入的是 const 类型,那么返回的就是 const 表达式,否则就不是

1
2
3
4
// 举个例子
int value = 5;
constexpr int result = square(value); // 编译错误,value 不是常量表达式
int nonConstResult = square(value); // 在运行时求值,nonConstResult 不是 const 类型