Cosa significano ^ () {} e ^ {} in C ++?


10

Di recente ho letto un codice C ++ come questo:

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


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

Non ho mai visto ^() {}^{}. Cosa vogliono dire? Qualche tipo di funzione anonima?


3
Questo C ++ è gestito , noto anche come C ++ / CLI? Questo è C #?
Thomas Matthews,

^sembra sicuramente una macro, prova a scansionare le #defineistruzioni. In effetti è possibile eseguire gcccon l' -Eopzione per espandere le macro:g++ -E main.cpp
neshkeev il

Questo è compilato con clang?
KamilCuk,


Risposte:


3

È difficile trovare un duplicato con ^() {}simboli, quindi posterò una risposta.

Questi sono "blocchi", che è un'estensione del compilatore di clang che crea chiusure simili a lambda.

Maggiori informazioni su wiki e in clangs Specifiche lingua per blocchi .

Quando c'è un elenco di argomenti vuoto, (void)può essere omesso, ^ { recvData(data, NULL); }è uguale a ^ void (void) { recvData(data, NULL); }.


3
Si noti che mentre funzionano in codice C & C ++, sono stati progettati principalmente attorno a un mondo object-c, e se si utilizza C ++, è quasi certamente necessario utilizzare lambdas e std :: function molto più idiomatici invece di questi (sebbene nota che std :: function può contenere blocchi )
Richard J. Ross III,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.