Niedawno przeczytałem trochę takiego kodu C ++:
setData(total, &user, ^() {
struct dst_t to = {ip, port};
sendData(to, data);
});
getData(total, ^{
recvData(data, NULL);
});
Nigdy nie widziałem ^() {}
ani ^{}
. Co mieli na myśli? Jakaś anonimowa funkcja?
^
na pewno wygląda jak makro, spróbuj przejrzeć#define
instrukcje. W rzeczywistości możesz uruchomićgcc
z-E
opcją rozwijania makr:g++ -E main.cpp
Odpowiedzi:
Trudno znaleźć duplikat z
^() {}
symbolami, więc opublikuję odpowiedź.Są to „bloki”, które są rozszerzeniem kompilatora clang, które tworzy zamknięcia podobne do lambda.
Więcej informacji na wiki oraz w specyfikacji języka dla bloków .
Gdy lista argumentów jest pusta,
(void)
można ją pominąć,^ { recvData(data, NULL); }
jest taka sama jak^ void (void) { recvData(data, NULL); }
.źródło