首頁 >後端開發 >C++ >Lambda 函數可以在 `constexpr` 上下文中使用嗎?

Lambda 函數可以在 `constexpr` 上下文中使用嗎?

DDD
DDD原創
2024-10-31 00:30:291043瀏覽

 Can Lambda Functions Be Used in `constexpr` Contexts?

constexpr 對 Lambda 函數的支援

constexpr 對 lambda 函數的支援一直是 C 社群中廣泛討論的話題。儘管根據 [expr.const]/(2.6) 目前在常數表達式中不允許使用 lambda,但工作草案 N4582 中包含的 N4487 建議刪除此限制。

建議的 lambda-相關變更:

  • 在常數表達式中允許 lambda。
  • 如果閉包類型的所有資料成員都是文字類型,則將其視為文字類型。
  • 如果 lambda 聲明符中省略了 constexpr 說明符,則產生的函數呼叫運算子如果滿足 constexpr 函數的要求,則被視為 constexpr。

範例:

一旦接受N4487,以下範例將有效:

<code class="c++">struct Test
{
  static const int value = []() constexpr { return 0; } ();
};</code>

解決方法:

解決方法:
<code class="c++">struct Test
{
  template <typename>
  static const int value = 0;
};</code>
解決方法:解決方法:解法:解決方法: 作為正式添加constexpr 支援之前的解決方法,您可以使用函數模板而不是lambda:

以上是Lambda 函數可以在 `constexpr` 上下文中使用嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn