Maison >développement back-end >C++ >Les fonctions Lambda peuvent-elles être utilisées avec `constexpr` en C ?

Les fonctions Lambda peuvent-elles être utilisées avec `constexpr` en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-02 09:51:02488parcourir

Can Lambda Functions Be Used with `constexpr` in C  ?

Fonctions Lambda et Constexpr

Question : Est-il possible d'utiliser constexpr avec les fonctions lambda en C ?

Dans l'exemple de code suivant, le compilateur signale une erreur liée à l'exigence d'une fonction constexpr :

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

Réponse :

Mise à jour ( C 17) : Depuis C 17, les fonctions lambda sont autorisées dans les expressions constantes.

Pré-C 17 : Les lambda ne sont actuellement pas autorisées dans les expressions constantes en C 14. Cependant , une proposition (N4487) a été faite pour permettre à certaines expressions lambda et objets de fermeture d'apparaître dans des expressions constantes.

Si cette proposition est acceptée, elle introduirait les changements suivants :

  • Les types de fermeture seraient considérés comme des types littéraux si leurs membres de données sont tous des types littéraux.
  • Si aucun spécificateur constexpr n'est fourni dans le déclarateur lambda, l'opérateur d'appel de fonction généré serait constexpr s'il répond aux exigences d'un constexpr function.

Ce changement s'alignerait sur le comportement des constructeurs implicitement définis et des fonctions d'opérateur d'affectation, qui peuvent être déduites comme constexpr le cas échéant.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn