问题描述
您可以在consteval中有constexpr对象 但是您不能在constexpr中使用consteval。
为什么?
我认为consteval应该是某种“狭窄的” constexpr。
请帮助我理解这种设计。
constexpr int constexpr_sqr(int n) { return n*n; }
consteval int consteval_sqr(int n) { return n*n; }
constexpr int constexpr_sqr2(int n) {
// not allowed
// return consteval_sqr(n);
// not allowed
// constexpr imm = consteval_sqr(n);
// return imm;
return constexpr_sqr(n);
}
int main() {
// while can do this
constexpr auto imm = consteval_sqr(999);
}
[LIVE]
解决方法
这是争论。 constexpr
函数不需要进行常量求值。这意味着n
在常量表达式中不可用。
我认为consteval应该是某种“狭窄的” constexpr。
不,这些只是必须要不断评估的函数。这意味着它们的参数必须始终在常量表达式中可用。
您可以使用在常量表达式中不可用的参数来调用constexpr
函数,只要您不在需要常量表达式的上下文中,它的格式仍然正确。