使用 Lambda 函数的 Constexpr:当前状态和未来前景
在 C 中,constexpr 支持编译器在编译时对表达式求值。然而,它对 lambda 函数的支持一直是人们感兴趣的话题。
历史上,C 14 禁止在常量表达式中使用 lambda 函数。在各种情况下强制使用 constexpr 的尝试被证明是不成功的。
但是,随着 C 17 接受 N4487,已经取得了重大进展。该提案允许在特定条件下在常量表达式中使用 lambda 表达式:
1。正确的 Lambda 表达式语法:
将 lambda 与 constexpr 一起使用时,请确保将 lambda 声明为 constexpr。这通知编译器应将 lambda 视为常量表达式。
2.闭包类型作为文字类型:
对于要在常量表达式中使用的 lambda 表达式,其闭包类型(由 lambda 创建的对象的类型)必须是文字类型。这意味着它的所有数据成员也必须是文字类型。
3. Constexpr 推断:
如果 lambda 声明省略了 constexpr 说明符,则函数调用运算符将被推断为 constexpr,前提是它满足 constexpr 函数的要求。与隐式构造函数和赋值运算符类似。
4.未来展望:
随着 C 17 的实现,lambda 函数现在可以在常量表达式中使用。随着 C 的发展,未来的修订可能会进一步扩展这种支持,从而有可能在恒定时间场景中为 lambda 提供更复杂和通用的用例。
以上是Lambda 函数可以在 C 语言的 Constexpr 中使用吗?的详细内容。更多信息请关注PHP中文网其他相关文章!