¿Qué significan ^ () {} y ^ {} en C ++?

10

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?

vego
fuente
3
¿Se gestiona C ++, también conocido como C ++ / CLI? ¿Es esto C #?
Thomas Matthews el
^seguro parece una macro, intente escanear a través de las #definedeclaraciones. De hecho, puede ejecutar gcccon la -Eopción de expandir macros:g++ -E main.cpp
neshkeev
¿Está esto compilado con clang?
KamilCuk

Respuestas:

3

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

KamilCuk
fuente
3
Tenga en cuenta que si bien funcionan en código C y C ++, se diseñaron principalmente en torno a un mundo objetivo-c, y si está utilizando C ++, es casi seguro que use las funciones lambdas y std :: mucho más idiomáticas en lugar de estas (aunque tenga en cuenta que std :: function puede contener bloques )
Richard J. Ross III