正如《Professional C++,Fifth Edition》所说:
constexpr:constant expression常量表达式,在编译器求值不能保证一定是。
cpp
constexpr double addone(double d) {
return d + 1;
}
constexpr double const_d{ 0 };
constexpr double const_e{ addone(const_d) };//在编译期求值
double dynamic_d{ 0 };
double e{ addone(dynamic_d) };//不在编译期求值
consteval:constant function evaluated at the front-end, 指定函数是*立即函数(immediate function)*保证在编译期求值。
cpp
consteval int square(int x) {
return x * x;
}
int main() {
constexpr int result = square(5); // 正确,编译时计算
std::cout << "Square of 5 is: " << result << std::endl;
return 0;
}