Constexpr函数必须有一个参数值
constexpr function must have one argument value?
由此可见,用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
调用,所以一切都很好。
相关文章:
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 是否可以在C++中有一个"generic"模板参数,该参数可以是非类型模板参数或类型?
- 我怎么能有一个以2D数组为参数的函数,而数组有一个我想更改的参数/维度
- 是否可以有一个模板函数,可以将向量和非向量类型都作为参数
- 为什么我应该在scanf()-家族成员中包含一个长度修饰符作为参数?有什么好处?使用长度修改器进行扫描的作用
- 此模板函数上的最后一个参数有什么用?
- 对于属性上的 NOTIFY 信号,如果我给它一个参数有什么区别?
- 为什么有一个构造函数同时接受initializer_list和一个参数包
- 如果我有一个将指针变量作为输入的函数,有没有办法将函数作为参数传递
- 为什么一个可变类模板最多只能有一个参数包
- 为什么boost::multi_array的ConstMultiArrayConcept有一个NumDims模板参数?
- 有一个可以是指针类型或非指针类型的模板参数
- 是否有一个WinAPI可以从带有可选空格和其他参数的命令行获取文件名
- C#:Cdecl-DllExport,参数中有一个指向类实例的指针
- 为什么make_unique有一个额外的移动,可以将 std::bind 作为参数的构造函数
- 我有一个成员,该成员是指向参数化函数的指针,我可以扩展参数类型吗?
- 当你有一个像 ::lower 这样的参数时,这在C++中是什么意思
- 一个类可以有一个没有参数的模板构造函数吗
- 我不能有一个将多个整数作为参数的构造函数方法/原型吗?阿杜伊诺
- 期望头文件中有一个参数