Was bedeuten ^ () {} und ^ {} in C ++?

10

Ich habe kürzlich einen C ++ - Code wie diesen gelesen:

setData(total, &user, ^() {
  struct dst_t to = {ip, port};
  sendData(to, data);
});


getData(total, ^{
  recvData(data, NULL);
});

Ich habe noch nie gesehen ^() {}noch ^{}. Was meinen sie? Eine anonyme Funktion?

vego
quelle
3
Ist dies verwaltetes C ++, auch bekannt als C ++ / CLI? Ist das C #?
Thomas Matthews
^Sieht sicher aus wie ein Makro. Versuchen Sie, #defineAnweisungen zu durchsuchen . In der Tat können Sie gccmit der -EOption ausführen , um Makros zu erweitern:g++ -E main.cpp
Neshkeev
Ist das mit clang zusammengestellt?
KamilCuk

Antworten:

3

Es ist schwer, ein Duplikat mit ^() {}Symbolen zu finden , daher werde ich eine Antwort posten.

Dies sind "Blöcke", eine Clang-Compiler-Erweiterung, die Lambda-ähnliche Verschlüsse erstellt.

Weitere Informationen im Wiki und in clangs Sprachspezifikation für Blöcke .

Wenn es eine leere Argumentliste gibt, (void)kann die weggelassen werden, die ^ { recvData(data, NULL); }ist die gleiche wie ^ void (void) { recvData(data, NULL); }.

KamilCuk
quelle
3
Beachten Sie, dass sie, während sie in C & C ++ - Code arbeiten, hauptsächlich für eine objektive C-Welt entwickelt wurden. Wenn Sie C ++ verwenden, sollten Sie mit ziemlicher Sicherheit die viel idiomatischeren Lambdas und die std :: -Funktion anstelle dieser verwenden (obwohl) Beachten Sie, dass std :: function Blöcke enthalten kann )
Richard J. Ross III