C++11 新特性 constexpr
constexpr是C++11引入的关键词,目的是为了引入更多的编译时计算能力,constexpr修饰的函数如果在编译器就能确定传入的参数,那么函数的调用就会替换为返回的值,如果编译器不能确定就和普通函数一样。
constexpr也可以用来修饰变量,和修饰函数不同的是,如果编译器不能确定值,就会报错。
比如这个例子
#include "stdio.h"
constexpr int sum(int a, int b)
{
return a + b;
}
int main(int argc, char** argv)
{
constexpr int sum1 = sum(1, 2);
int sum2 = sum(*(int*)argv[1], *(int*)argv[2]);
printf("sum1 %d sum2 %d\n", sum1, sum2);
return 0;
}

sum1用constexpr修饰后,第一次调用编译器就能确定值,所以会被替换为值,生成的汇编代码中只调用了一次sum,而假如sum2也用constexpr修饰,就会发生一个编译错误,因为sum2的返回值在运行时才能确定。

最后更新于