Constexpr函数必须有一个参数值

constexpr function must have one argument value?

本文关键字:参数 有一个 函数 Constexpr      更新时间:2023-10-16

由此可见,用constexpr声明的函数必须满足以下几个要求,其中之一是:

至少存在一个参数值,使得函数的调用可以是核心常量表达式的求值子表达式…

constexpr函数可以有无参数:

constexpr int Bar( /* empty */ ) { return 0xFF; }
constexpr int value = Bar(); // Valid expression

作为子例程调用的constexpr函数也不能确定整个表达式为核心常数表达式。

那么必须存在一个参数值是什么意思呢?

[为将来的读者更新]

关于constexpr function需求的描述显然已经从这个问题开始修正了:

至少存在一个参数值,使得函数的调用可以是核心常量表达式的求值子表达式…

:

至少存在一组参数值,使得函数的调用可以是核心常量表达式的求值子表达式…

来自en.cppreference.com的报价与标准不符,真实报价为(§7.1.5/5):

对于既不是默认也不是模板的constexpr函数或constexpr构造函数,如果不存在实参值,使得函数或构造函数的调用可以是核心常量表达式的求值子表达式(5.20)[…]程序是病态的;不需要诊断。

这基本上是说必须存在一个有效的参数集(在你的例子中,空集合是有效的)

这里的"One argument value"是指"一组参数"。虚函数有一个可能的参数集,即空参数集。

在您的示例中,这个空参数集确实导致了一个有效的constexpr调用,所以一切都很好。

相关文章: