2016-08-30 293 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.