提问者:小点点

为什么constexpr只能用来初始化constexpr var? [副本]


我完全搞不懂什么是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;
}

共1个答案

匿名用户

constexpr在编译时确定。 它与C中的宏类似。编译器只能计算标记为constexpr的函数,因此它知道其结果不依赖于运行时参数。