Heim  >  Artikel  >  Backend-Entwicklung  >  Können Lambda-Funktionen in „constexpr“-Kontexten verwendet werden?

Können Lambda-Funktionen in „constexpr“-Kontexten verwendet werden?

DDD
DDDOriginal
2024-10-31 00:30:29978Durchsuche

 Can Lambda Functions Be Used in `constexpr` Contexts?

constexpr-Unterstützung für Lambda-Funktionen

constexpr-Unterstützung für Lambda-Funktionen ist ein viel diskutiertes Thema in der C-Community. Obwohl Lambdas gemäß [expr.const]/(2.6) derzeit nicht in konstanten Ausdrücken zulässig sind, schlägt N4487, das im Arbeitsentwurf N4582 enthalten ist, vor, diese Einschränkung aufzuheben.

Vorgeschlagener Lambda- Verwandte Änderungen:

  • Lambdas in konstanten Ausdrücken zulassen.
  • Betrachten Sie einen Abschlusstyp als Literaltyp, wenn alle seine Datenelemente Literaltypen sind.
  • Wenn der constexpr-Spezifizierer im Lambda-Deklarator weggelassen wird, gilt der generierte Funktionsaufrufoperator als constexpr, wenn er die Anforderungen einer constexpr-Funktion erfüllt.

Beispiel:

Das folgende Beispiel ist gültig, sobald N4487 akzeptiert wird:

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

Problemumgehung:

Als Problemumgehung, bevor die constexpr-Unterstützung offiziell hinzugefügt wird, können Sie verwenden eine Funktionsvorlage anstelle eines Lambda:

<code class="c++">struct Test
{
  template <typename>
  static const int value = 0;
};</code>

Das obige ist der detaillierte Inhalt vonKönnen Lambda-Funktionen in „constexpr“-Kontexten verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn