lambdas एक unnamable वर्ग और उसके उदाहरण के लिए syntatic चीनी हैं। कभी-कभी यह कोड आपके विस्तार का विस्तार करता है कि यह नामनीय वर्ग क्या हो रहा है यह समझने में सहायता कर सकता है।
struct anonymous_type {
capture_list;
auto operator()(arg_list) const -> return_value_clause_opt {
body
}
anonymous_type(capture_list_in):capture_list(capture_list_in) {}
};
आप अपने सादे नाम से capture_list
में एक चर सूची है, यह गुमनाम वर्ग के भीतर एक प्रति में नकल है:
[ capture_list ](arg_list) -> return_value_clause_opt { body };
बहुत मोटे तौर पर (छद्म कोड) हो जाता है।
तो अपने timesFive
बन
struct __secret_name__ {
int multiplier;
int operator()(int a) const { return a*multiplier; }
};
int multiplier = 5;
auto timesFive = __secret_name__{multiplier};
यह बहुत स्पष्ट है कि उपरोक्त कोड में multiplier
बदलते timesFive
के व्यवहार में परिवर्तन नहीं होगा होना चाहिए।
आप नाम के सामने एक &
रखते हैं, एक गैर const
संदर्भ गुमनाम वर्ग के भीतर रखा गया है।
struct __secret_name__ {
int& multiplier;
int operator()(int a) const { return a*multiplier; }
};
int multiplier = 5;
auto timesFive = __secret_name__{multiplier};
अब, multiplier
बदलते timesFive
के व्यवहार बदल जाएगा, क्योंकि timesFive
एक संदर्भ रखती गुणक के लिए, इसकी एक प्रति नहीं।
कुछ विवरण संक्षिप्तता के लिए ऊपर छोड़ दिए गए हैं। नाम __secret_name__
केवल प्रदर्शनी के लिए है। लांबा के सदस्य चर वास्तव में सार्वजनिक नहीं हैं। लैम्ब्डा को तुच्छ रूप से रचनात्मक किया जा रहा है कार्यान्वयन परिभाषित किया गया है भले ही इसका डेटा है। आदि
कृपया समस्या का वर्णन वर्णनात्मक बनाएं। हां, आप लैम्ब्स को समझने की कोशिश कर रहे हैं, लेकिन यह आपको वास्तव में जो पूछ रहा है उसके बारे में बहुत कुछ नहीं बताता है। (मैं इसे स्वयं संपादित करने पर विचार कर रहा था, लेकिन मुझे उन विचारों को पसंद नहीं आया जिनके साथ मैं आया था।) – jpmc26