constexpr是常量表达式的意思。通过编译器求值,避免简单的函数在运行时求值,降低性能。常量表达式需要满足:
-
参数都是常量表达式
-
返回的结果是常量
下面看一个例子:
#include <iostream>
constexpr int add(int a, int b) {
return a + b;
}
int main(void) {
const int a = add(1, 1+1);
static_assert(a == 3, "failed");
}
如果上面去掉函数add前的constexpr修饰符,则会报错:non-constant condition for static assertion。说明编译器变量a的值并没有求得。加上constexpr则能在编译器求得add(1, 1+1);的值。