Recientemente leí un código C ++ como este:
setData(total, &user, ^() {
  struct dst_t to = {ip, port};
  sendData(to, data);
});
getData(total, ^{
  recvData(data, NULL);
});
Nunca he visto ^() {}ni ^{}. ¿Qué quieren decir? ¿Algún tipo de función anónima?

^seguro parece una macro, intente escanear a través de las#definedeclaraciones. De hecho, puede ejecutargcccon la-Eopción de expandir macros:g++ -E main.cppRespuestas:
Es difícil encontrar un duplicado con
^() {}símbolos, así que publicaré una respuesta.Estos son "bloques", que es una extensión del compilador clang que crea cierres tipo lambda.
Más información en wiki y en clangs Especificación de idioma para bloques .
Cuando hay una lista de argumentos vacía,
(void)se puede omitir,^ { recvData(data, NULL); }es lo mismo que^ void (void) { recvData(data, NULL); }.fuente