constexpr修饰函数时其实只是告诉编译器该函数可以按常量值的表达式去优化,但是如果函数本身不是常量值的表达式的话依然能够编译通过。
C++20新增了consteval关键字,用来修饰函数时常量值的表达式,而且是强制性的。如果函数本身不是常量值的表达式的话则会编译失败。
constexpr int add100_constexpr(int n) {
return n + 100;
}
consteval int add100_consteval(int n) {
return n + 100;
}
void test() {
constexpr int c_constexpr = add100_consteval(200);
int x = 200;
// int d_consteval = add100_consteval(x); // 编译失败
int d_constexpr = add100_constexpr(x); //编译成功,constexpr并非强制限定为常量表达式
}
本文探讨C++20中引入的consteval关键字,对比constexpr,深入解析consteval如何强制函数作为常量表达式,确保编译时计算。通过示例代码展示两者差异及consteval的使用限制。
380

被折叠的 条评论
为什么被折叠?



