^ () {} และ ^ {} หมายถึงอะไรใน C ++


10

ฉันเพิ่งอ่านรหัส C ++ บางอย่างเช่นนี้:

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


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

ผมไม่เคยเห็นหรือ^() {} ^{}พวกเขาหมายถึงอะไร? ฟังก์ชั่นที่ไม่ระบุชื่อบางอย่าง?


3
สิ่งนี้มีการจัดการ C ++ หรือที่รู้จักว่า C ++ / CLI หรือไม่ นี่คือ C # หรือไม่
โธมัสแมตทิวส์

^แน่นอนว่าดูเหมือนแมโครลองสแกน#defineคำสั่ง ในความเป็นจริงคุณสามารถเรียกใช้gccด้วย-Eตัวเลือกในการขยายมาโคร:g++ -E main.cpp
neshkeev

มันรวบรวมด้วยเสียงดังกราวหรือไม่?
KamilCuk


1
อาจจะเป็น: stackoverflow.com/questions/9201514/…
jxh

คำตอบ:


3

มันยากที่จะหา^() {}สัญลักษณ์ที่ซ้ำกันดังนั้นฉันจะโพสต์คำตอบ

เหล่านี้คือ "บล็อก" ซึ่งเป็นส่วนขยายคอมไพเลอร์เสียงดังกราวที่สร้างการปิดเหมือนแลมบ์ดา

ข้อมูลเพิ่มเติมได้ที่วิกิพีเดียและclangs ข้อมูลจำเพาะทางภาษาสำหรับบล็อก

เมื่อมีรายการอาร์กิวเมนต์ว่าง(void)สามารถละเว้นที่เป็นเช่นเดียวกับ^ { recvData(data, NULL); }^ void (void) { recvData(data, NULL); }


3
โปรดทราบว่าขณะที่พวกเขาทำงานในรหัส C & C ++ พวกเขาได้รับการออกแบบมาเป็นหลักในโลกแห่งวัตถุประสงค์และถ้าคุณใช้ C ++ คุณควรใช้ lambdas และ std :: function แทนการใช้สิ่งเหล่านี้ (แม้ว่า โปรดทราบว่าฟังก์ชั่น std :: สามารถเก็บบล็อกได้ )
Richard J. Ross III
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.