Constexpr lambda默认情况下?

时间:2016-08-30 06:05:34

标签: c++ lambda constexpr c++17

根据n4487和其他c ++ 17引用,将会有新的lambda函数说明符 - constexpr,如果存在,则“显式指定函数调用运算符为{{ 1}}功能。“。我理解lambda中常量表达式的动机。对我来说有趣的是提案的第4点,其中指出:

  

4)如果在lambda声明符中省略了constexpr说明符,则函数调用运算符(或模板)是constexpr,如果它满足constexpr函数的要求。

这引出了两个问题:

  1. 为什么我们需要constexpr说明符?看起来lambda调用运算符是否为constexpr只取决于它是否“满足constexpr函数的要求”,而不是来自constexpr说明符存在。< / LI>
  2. 如果默认情况下允许constexpr lambda是可以接受的,为什么不建议其他类型的函数 - 例如全局函数?如果编译器开始将所有涵盖需求的函数视为constexpr
  3. ,会产生什么影响

1 个答案:

答案 0 :(得分:7)

  1. constexpr限定符使lambda的编译错误违反了constexpr函数的要求。当你明确地需要 lambda为constexpr时,你可以使用它,这样你就不会意外地使它成为constexpr

  2. Asked and answered.