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?


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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.