我完全搞不懂什么是constexpr
,为什么constexpr函数用来初始化非常量变量而不是编译时计算结果,我认为constexpr变量只是一个需要constexpr函数初始化的变量,但是为什么它对其他类型的变量不起作用呢?
#include <iostream>
#include <ctime>
constexpr long long fib(int n)
{
return n > 1 ? fib(n - 2) + fib(n - 1) : n;
}
int main()
{
const time_t start = clock();
long long a = fib(25);
std::cout << clock() - start << std::endl; //result is 6 on my computer
return 0;
}
constexpr
在编译时确定。 它与C中的宏类似。编译器只能计算标记为constexpr
的函数,因此它知道其结果不依赖于运行时参数。