首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >constexpr函数必须有一个参数值?

constexpr函数必须有一个参数值?
EN

Stack Overflow用户
提问于 2016-09-27 19:18:31
回答 2查看 691关注 0票数 18

根据this的说法,使用constexpr声明的函数必须满足几个要求,其中之一如下:

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

好的,constexpr函数可以没有参数

代码语言:javascript
复制
constexpr int Bar( /* empty */ ) { return 0xFF; }
constexpr int value = Bar(); // Valid expression

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

那么,一个参数值必须存在意味着什么呢?

面向未来读者的更新

显然,关于constexpr function要求的描述已经被修复,因为这个问题来自:

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

至:

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-27 19:30:50

关于标准,en.cppreference.com中的引用不准确,真正的引用是(§7.1.5/5):

对于既不是默认也不是模板的constexpr函数或constexpr构造函数,如果不存在参数值,则函数或构造函数的调用可能是核心常量表达式(5.20)的求值的子表达式...该程序的格式不正确;不需要诊断。

这基本上是说必须存在一个有效的参数集(在您的情况下,空集是一个有效的参数集)。

票数 19
EN

Stack Overflow用户

发布于 2016-09-27 19:30:31

“一个参数值”在这里指的是“一组参数”。Nullary函数有一个可能的参数集,即空集。

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39723288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档