首页 > 后端开发 > C++ > Lambda 函数可以在 `constexpr` 上下文中使用吗?

Lambda 函数可以在 `constexpr` 上下文中使用吗?

DDD
发布: 2024-10-31 00:30:29
原创
1063 人浏览过

 Can Lambda Functions Be Used in `constexpr` Contexts?

constexpr 对 Lambda 函数的支持

constexpr 对 lambda 函数的支持一直是 C 社区中广泛讨论的话题。尽管根据 [expr.const]/(2.6) 目前在常量表达式中不允许使用 lambda,但工作草案 N4582 中包含的 N4487 建议删除此限制。

建议的 lambda-相关更改:

  • 在常量表达式中允许 lambda。
  • 如果闭包类型的所有数据成员都是文字类型,则将其视为文字类型。
  • 如果 lambda 声明符中省略了 constexpr 说明符,则生成的函数调用运算符如果满足 constexpr 函数的要求,则被视为 constexpr。

示例:

一旦接受 N4487,以下示例将有效:

<code class="c++">struct Test
{
  static const int value = []() constexpr { return 0; } ();
};</code>
登录后复制

解决方法:

作为正式添加 constexpr 支持之前的解决方法,您可以使用函数模板而不是 lambda:

<code class="c++">struct Test
{
  template <typename>
  static const int value = 0;
};</code>
登录后复制

以上是Lambda 函数可以在 `constexpr` 上下文中使用吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板