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

Mic*_*lzh 0 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;
}
Run Code Online (Sandbox Code Playgroud)

cig*_*ien 5

一个constexpr类似的功能product可以在运行时或在编译时被调用。这取决于调用函数的上下文。

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

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

constexpr在编译时调用函数,必须在需要编译时评估的上下文中调用它,参数在编译时已知并存储在constexpr变量中。