非编译时间计算函数constexpr如何?

时间:2020-09-22 03:41:38

标签: c++ constexpr

为什么非编译时间计算函数“乘积”可以是constexpr

#include <iostream>

constexpr int product(int x, int y) {
    return x * y;
}

int main(int argc, char* argv[]) {
    using namespace std;
    int x1, y1 = 0;
    cout << "input x1:\n";
    cin >> x1;
    cout << "input y1:\n";
    cin >> y1;
    const int a = product(x1, y1);
    cout << a << endl;
    return 0;
}

1 个答案:

答案 0 :(得分:5)

可以在运行时或编译时调用constexpr之类的product函数。这取决于调用该函数的上下文。

使用运行时值调用product意味着该函数将被视为常规运行时函数。

类似地,将调用结果存储在非constexpr变量中也将导致在运行时调用该函数。 (请注意,将结果存储在const int变量中也被视为constexpr上下文。)

要在编译时调用constexpr函数,必须在需要编译时评估的上下文中调用该函数,并使用在编译时已知的参数并将其存储在constexpr变量中。 / p>