Apa artinya ^ () {} dan ^ {} dalam C ++?


10

Baru-baru ini saya membaca beberapa kode C ++ seperti ini:

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


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

Saya belum pernah melihat ^() {}juga ^{}. Apa yang mereka maksud? Semacam fungsi anonim?


3
Apakah ini dikelola C ++, alias C ++ / CLI? Apakah ini C #?
Thomas Matthews

^Tentu terlihat seperti makro, cobalah untuk memindai melalui #definepernyataan. Bahkan Anda dapat menjalankan gccdengan -Eopsi untuk memperluas macro:g++ -E main.cpp
neshkeev

Apakah ini dikompilasi dengan dentang?
KamilCuk


Jawaban:


3

Sulit menemukan duplikat dengan ^() {}simbol, jadi saya akan mengirim jawaban.

Ini adalah "blok", yang merupakan ekstensi compiler dentang yang menciptakan penutupan seperti lambda.

Info lebih lanjut di wiki dan dentang Spesifikasi Bahasa untuk Blok .

Ketika ada daftar argumen kosong, (void)bisa dihilangkan, ^ { recvData(data, NULL); }sama dengan ^ void (void) { recvData(data, NULL); }.


3
Perhatikan bahwa sementara mereka bekerja dalam kode C&C ++, mereka terutama dirancang di sekitar dunia objektif-c, dan jika Anda menggunakan C ++, Anda hampir pasti harus menggunakan lambda dan fungsi std :: yang jauh lebih idiomatis daripada ini (meskipun perhatikan bahwa std :: function dapat menampung blok )
Richard J. Ross III
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.