O que ^ () {} e ^ {} significam em C ++?

10

Li recentemente algum código C ++ como este:

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


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

Eu nunca vi ^() {}nem ^{}. O que eles querem dizer? Algum tipo de função anônima?

vego
fonte
3
Isso é C ++ gerenciado , também conhecido como C ++ / CLI? Isso é c #?
Thomas Matthews
^Se parece com uma macro, tente varrer as #defineinstruções. Na verdade, você pode executar gcccom a -Eopção de expandir macros:g++ -E main.cpp
neshkeev 26/11/19
Isso é compilado com clang?
26719 KamilCuk
11
Talvez: stackoverflow.com/questions/9201514/…
jxh 26/11/19

Respostas:

3

É difícil encontrar uma duplicata com ^() {}símbolos, por isso vou postar uma resposta.

Estes são "blocos", que são uma extensão do compilador clang que cria fechamentos do tipo lambda.

Mais informações no wiki e no clangs Especificação de idioma para blocos .

Quando há uma lista de argumentos vazia, (void)pode ser omitido, o ^ { recvData(data, NULL); }é o mesmo que ^ void (void) { recvData(data, NULL); }.

KamilCuk
fonte
3
Observe que, embora funcionem no código C & C ++, eles foram projetados principalmente em torno de um mundo objetivo-c, e se você estiver usando C ++, certamente deve usar as funções lambdas e std :: muito mais idiomáticas em vez delas (embora Observe que std :: function pode conter blocos )
Richard J. Ross III