2016-08-30 132 views
10

根据n4487和其他C++ 17引用,将会有新的lambda函数说明符 - constexpr,如果存在“明确指定函数调用运算符是constexpr函数”。。我理解lambda表达式的动机。什么是对我有意思的是,提议的第4点规定:默认情况下,Constexpr lambda?

4)如果constexpr说明符的拉姆达说明符中省略,函数调用运算符(或模板)为constexpr是否会满足要求一个constexpr功能。

这使我两个问题:

  1. 为什么我们需要constexpr符?看起来lambda调用操作符是否为constexpr仅取决于它是否“满足constexpr函数的要求”,而不是来自constexpr说明符的存在。
  2. 如果在默认情况下有constexpr lambda是可以接受的,那么为什么不对其他类型的函数提出 - 例如全局函数?如果编译器开始将所有满足要求的函数都视为constexpr,会有什么影响?

回答

7
  1. constexpr预选赛使它成为拉姆达违反的constexpr功能要求的编译错误。当你明确使用需要时,lambda必须是constexpr,这样你不会不小心把它做成constexpr

  2. Asked and answered.