34 votes

Accès à la variable constexpr à l'intérieur de l'expression lambda sans capture

Dans l'exemple suivant, je peux accéder au constexpr variables x à l' intérieur du lambda y sans capturer explicitement. Cela n'est pas possible si x n'est pas déclaré comme constexpr .

Existe-t-il des règles spéciales qui s'appliquent à constexpr pour la capture?

 int foo(auto l) {
    // OK
    constexpr auto x = l();
    auto y = []{return x;};
    return y();

    // NOK
    // auto x2 = l();
    // auto y2 = []{ return x2; };
    // return y2();        
}

auto l2 = []{return 3;};

int main() {
    foo(l2);
}
 

32voto

songyuanyao Points 2265

Existe-il des règles spéciales qui s'appliquent à l' constexpr pour la capture/accès?

Oui, constexpr variables pourraient être lu sans prise en lambda:

Une expression lambda peut lire la valeur d'une variable sans la saisie si la variable

  • a const non-volatile de l'intégrale ou de type énumération et a été initialisé avec une expression constante, ou
  • est constexpr et trivialement copie constructible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X