constexpr(常量表达式):指值不会改变并且在编译过程就能得到计算结果的表达式。
常量表达式的优点是将计算过程转移到编译时期,那么运行期就不再需要计算了,这样一来,程序的性能也就提升了。
以下程序演示了,进行相同的1百万次计算,使用与不使用constexpr表达式的时间差距
#include <iostream>
#include <time.h>
using namespace std;
constexpr int add1(int x, int y)
{
return x + y;
}
int add2(int x, int y)
{
return x + y;
}
int main()
{
// 1百万次计算,使用与不使用constexpr表达式的时间差距
clock_t start, finish;
start = clock();
for (int i = 0; i < 1000000; i++)
{
constexpr int ret = add1(100, 200); // constexpr
}
finish = clock();
printf("use constexpr : %f seconds\n", (double)(finish - start) / CLOCKS_PER_SEC);
start = clock();
for (int i = 0; i < 1000000; i++)
{
int ret = add2(100, 200); // not const
}
finish = clock();
printf("not constexpr : %f seconds\n", (double)(finish - start) / CLOCKS_PER_SEC);
return 0;
}
程序输出:
很显然,在可以将表达式声明为常量表达式的前提下,会在执行期间省掉很多时间。
对于需要高并发的业务来说,这无疑是一个值得考虑的优化的地方。
谢谢阅读。