73 votes

Que signifie [&] avant de fonctionner?

Que signifie la ligne de code suivante?

 auto allowed = [&](int x, const std::vector<int>&vect){

....

}
 

Je veux dire, que font [&] ? et est-ce que cela fonctionne avec le même nom que la variable ??

Parce qu'il a utilisé de cette façon: unsigned short ok = get_allowed(0, vect);

134voto

user3286661 Points 2733

Cela signifie que la fonction lambda permettra de saisir toutes les variables dans la portée par référence.

Pour utiliser d'autres variables autres que ce qui a été transmis à lambda en son sein, on peut utiliser capture-clause []. Vous pouvez les capturer à la fois de référence et de la valeur, que vous pouvez spécifier à l'aide de & et = respectivement:

  • [=] de la capture de toutes les variables dans la portée par de la valeur
  • [&] de la capture de toutes les variables dans la portée par référence
  • [&var] capture var par référence
  • [&, var] de spécifier que la valeur par défaut mode de capture est par référence et nous voulons capturer var
  • [=, &var] capturer les variables dans la portée par de la valeur par défaut, mais la capture var à l'aide de l' au lieu de cela

19voto

Bathsheba Points 23209

C'est un lambda liste de capture et a été défini en C++ le C++11.

[&] , Cela signifie que vous êtes désireux d'accéder à toutes les variables par référence actuellement dans le champ d'application au sein de la fonction lambda.

C'est votre travail pour s'assurer que les objets sont toujours dans la portée au point de la fermeture est invoquée, sinon le programme le comportement est indéfini.

12voto

Kristóf Points 111

Il définit une expression Lambda, qui est essentiellement une fonction sans nom. Il a liste des paramètres de l' (int x, const std::vector<int>&vect) et un corps de la fonction { ... }. Mais il a aussi une liste de capture dans le début [&]. Si vous souhaitez accéder à une variable (qui n'est pas un paramètre) du corps de la lambda expression, vous avez à faire de l'expression "prendre la variable avec elle-même", de sorte que la variable peut être utilisée plus tard, quand l'expression lambda sera exécuté.

Vous pouvez soit fournir une liste de variables, ou de l'utilisation de "tous" pour capturer tous. [&] signifie s'emparer de référence, et [=] signifierait pour la capture de la valeur.

(Si vous utilisez [&], à noter que le corps de lambda va utiliser la valeur de la variable au moment de la lambda est exécuté, et non pas la valeur qui était en vigueur lors de la création de la lambda! C'est parce que vous ne disposez pas d'une copie de la valeur, seulement une référence.)

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