Que signifient ^ () {} et ^ {} en C ++?

10

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?

vego
la source
3
Est-ce géré C ++, alias C ++ / CLI? Est-ce C #?
Thomas Matthews
^ressemble à une macro, essayez de parcourir les #defineinstructions. En fait, vous pouvez exécuter gccl' -Eoption d'étendre les macros:g++ -E main.cpp
neshkeev
Est-ce compilé avec clang?
KamilCuk

Réponses:

3

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); }.

KamilCuk
la source
3
Notez que bien qu'ils fonctionnent dans le code C & C ++, ils ont été principalement conçus autour d'un monde objectif-c, et si vous utilisez C ++, vous devriez presque certainement utiliser les fonctions lambdas et std :: beaucoup plus idiomatiques au lieu de celles-ci (bien que notez que std :: function peut contenir des blocs )
Richard J. Ross III