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

क्या यह क्लैंग के साथ संकलित है?
कामिलुक


जवाबों:


3

^() {}प्रतीकों के साथ एक डुप्लिकेट खोजना मुश्किल है , इसलिए मैं एक उत्तर पोस्ट करूंगा।

ये "ब्लॉक" हैं, जो एक क्लैंग कंपाइलर एक्सटेंशन है जो लैम्ब्डा जैसे क्लोजर बनाता है।

विकी पर अधिक जानकारी और खंडों के लिए भाषा विशिष्टता में

जब कोई रिक्त तर्क सूची होती है, तो (void)उसे छोड़ दिया जा सकता है, ^ { recvData(data, NULL); }जैसा है वैसा ही है ^ void (void) { recvData(data, NULL); }


3
ध्यान दें कि जब वे C & C ++ कोड में काम करते हैं, तो वे मुख्य रूप से एक वस्तुनिष्ठ-सी दुनिया के आसपास डिज़ाइन किए गए थे, और यदि आप C ++ का उपयोग कर रहे हैं, तो आपको निश्चित रूप से इन के बजाय बहुत अधिक मुहावरेदार लैम्ब्डा और std :: फ़ंक्शन का उपयोग करना चाहिए (हालांकि ध्यान दें कि std :: function block होल्ड कर सकता है )
रिचर्ड जे। रॉस III
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.