Constexpr lambda by default?

Constexpr lambda by default?

本文关键字:default by lambda Constexpr      更新时间:2023-10-16

根据n4487和其他c++17参考,将会有新的lambda函数说明符- constexpr,如果出现"显式指定函数调用操作符是constexpr函数"。我理解在lambda中使用常量表达式的动机。令我感兴趣的是提案的第四点:

4)如果在lambda声明符中省略了constexpr说明符,则如果满足constexpr函数的要求,则函数调用操作符(或模板)为constexpr

这让我想到两个问题:

  1. 为什么需要constexpr规范符?看起来lambda调用运算符是否为constexpr仅取决于它是否"满足constexpr函数的要求",而不是来自constexpr说明符的存在。
  2. 如果默认情况下可以接受constexpr lambda,为什么不建议其他类型的函数-例如全局函数?如果编译器开始将所有满足要求的函数视为constexpr,将会产生什么影响?
  1. constexpr限定符使lambda违反constexpr函数的要求成为编译错误。当您显式需要 lambda为constexpr时使用它,这样您就不会意外地使它不是constexpr

  2. 提问与回答