J'ai récemment lu du code C ++ comme celui-ci:
setData(total, &user, ^() {
struct dst_t to = {ip, port};
sendData(to, data);
});
getData(total, ^{
recvData(data, NULL);
});
Je n'ai jamais vu ^() {}
ni ^{}
. Que signifient-ils? Une sorte de fonction anonyme?
^
ressemble à une macro, essayez de parcourir les#define
instructions. En fait, vous pouvez exécutergcc
l'-E
option d'étendre les macros:g++ -E main.cpp
Réponses:
Il est difficile de trouver un doublon avec des
^() {}
symboles, alors je posterai une réponse.Ce sont des "blocs", qui sont une extension du compilateur clang qui crée des fermetures de type lambda.
Plus d'infos sur wiki et en clangs Spécification du langage pour les blocs .
Lorsqu'il y a une liste d'arguments vide, le
(void)
peut être omis,^ { recvData(data, NULL); }
le même que^ void (void) { recvData(data, NULL); }
.la source