नीचे दिए गए कोड 0 को प्रिंट करते हैं, लेकिन मुझे 1 देखने की उम्मीद है। मेरा निष्कर्ष यह है कि लैम्ब्डा फ़ंक्शंस वास्तव में फ़ंक्शंस में कैप्चर पैरामीटर पास करके नहीं आते हैं, जो अधिक है सहज ज्ञान युक्त। क्या मैं सही हूँ या क्या मुझे कुछ याद आ रहा है?सी ++ 11 लैम्ब्डा कैप्चर घोषणा मूल्य पर कैप्चर द्वारा
#include <iostream>
int main(int argc, char **argv){
int value = 0;
auto incr_value = [&value]() { value++; };
auto print_value = [ value]() { std::cout << value << std::endl; };
incr_value();
print_value();
return 0;
}
धन्यवाद। मैं मूल्य के बारे में सोच रहा था क्योंकि मूल्य के अपडेट में फ़ंक्शन के बाहर दिखाई नहीं देगा। हालांकि, ऐसा लगता है जैसे फ़ंक्शन के बाहर के फ़ंक्शन फ़ंक्शन के अंदर दिखाई नहीं देंगे। – perreal
यहां भ्रामक क्या हो सकता है शब्द है: मूल्य से "एक प्रति उत्पन्न करें"। लैम्ब्डा में परिवर्तनीय की एक प्रति है, यह लैम्ब्डा की घोषणा के बिंदु पर लिया गया मूल्य है। चूंकि लैम्ब्डा की निजी प्रतिलिपि होती है, मूल वस्तु को लैम्ब्डा के अंदर संशोधित या पढ़ा नहीं जाता है। यही कारण है कि वास्तव में संदर्भ द्वारा कैप्चर किया गया है, जिस स्थिति को आप मूल को देखना/संशोधित करना चाहते हैं। – Klaim