^ () {} Ve ^ {}, C ++ 'da ne anlama geliyor?


10

Son zamanlarda böyle bazı C ++ kodu okudum:

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


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

Daha önce hiç görmediğim ^() {}, ne de ^{}. Ne demek istiyorlar? Bir tür anonim işlev?


3
Bu yönetilen C ++, aka C ++ / CLI mı? Bu C # mı?
Thomas Matthews

^bir makroya benziyor, #defineifadeleri taramaya çalışın . Aslında makroları genişletme seçeneği gccile çalışabilirsiniz -E:g++ -E main.cpp
neshkeev

Bu clang ile derlenmiş mi?
KamilCuk


Yanıtlar:


3

^() {}Sembollerle bir kopya bulmak zor , bu yüzden bir cevap göndereceğim .

Bunlar lambda benzeri kapaklar oluşturan bir clang derleyici uzantısı olan "bloklar" dır.

Daha fazla bilgi wiki ve clangs Bloklar için Dil Özellikleri .

Boş bir argüman listesi olduğunda, (void)atlanabilir, ^ { recvData(data, NULL); }ile aynıdır ^ void (void) { recvData(data, NULL); }.


3
C & C ++ kodunda çalışırken, öncelikle bir obj-c dünyası etrafında tasarlandıklarını ve C ++ kullanıyorsanız neredeyse bunların yerine çok daha fazla deyimsel lambdas ve std :: işlevini kullanmanız gerektiğini unutmayın. std :: fonksiyonunun blokları tutabileceğini unutmayın )
Richard J. Ross III
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.