为什么非编译时间计算函数“乘积”可以是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;
}
答案 0 :(得分:5)
可以在运行时或编译时调用constexpr
之类的product
函数。这取决于调用该函数的上下文。
使用运行时值调用product
意味着该函数将被视为常规运行时函数。
类似地,将调用结果存储在非constexpr
变量中也将导致在运行时调用该函数。 (请注意,将结果存储在const int
变量中也被视为constexpr
上下文。)
要在编译时调用constexpr
函数,必须在需要编译时评估的上下文中调用该函数,并使用在编译时已知的参数并将其存储在constexpr
变量中。 / p>