根据n4487和其他c ++ 17引用,将会有新的lambda函数说明符 - constexpr
,如果存在,则“显式指定函数调用运算符为{{ 1}}功能。“。我理解lambda中常量表达式的动机。对我来说有趣的是提案的第4点,其中指出:
4)如果在lambda声明符中省略了
constexpr
说明符,则函数调用运算符(或模板)是constexpr
,如果它满足constexpr
函数的要求。
这引出了两个问题:
constexpr
说明符?看起来lambda调用运算符是否为constexpr
只取决于它是否“满足constexpr
函数的要求”,而不是来自constexpr
说明符存在。< / LI>
constexpr
lambda是可以接受的,为什么不建议其他类型的函数 - 例如全局函数?如果编译器开始将所有涵盖需求的函数视为constexpr
?答案 0 :(得分:7)
constexpr
限定符使lambda的编译错误违反了constexpr
函数的要求。当你明确地需要 lambda为constexpr
时,你可以使用它,这样你就不会意外地使它成为constexpr
。