为什么非编译时计算函数“产品”可以是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)
一个constexpr类似的功能product可以在运行时或在编译时被调用。这取决于调用函数的上下文。
product使用运行时值调用意味着该函数将被视为常规运行时函数。
同样,将调用结果存储在非constexpr变量中也会导致函数在运行时被调用。(请注意,将结果存储在const int变量中也被视为constexpr上下文。)
要constexpr在编译时调用函数,必须在需要编译时评估的上下文中调用它,参数在编译时已知并存储在constexpr变量中。