std::function<int()> void f1()
{
int a, b, c, d, ..., x, y, z;
return [=] { return a + b + c; };
}
बनामक्या यह हमेशा लैम्ब्डा अभिव्यक्ति में सभी को कैप्चर करने का एक बुरा अभ्यास है?
std::function<int()> void f2()
{
int a, b, c, d, ..., x, y, z;
return [a, b, c] { return a + b + c; };
}
कहने की जरूरत नहीं, पूर्व, छोटे handier, और बाद की तुलना में अधिक सुंदर है।
हालांकि, मैं अब भी चिंता:
प्रदर्शन दृष्टिकोण से, बाद हमेशा पूर्व की तुलना में बेहतर है?
क्या मानक गारंटी लैम्बडा अभिव्यक्ति केवल आवश्यक चर को कैप्चर करती है? यानी पूर्व उदाहरण में, केवल ए, बी, सी पर कब्जा कर लिया गया है, अप्रयुक्त चर डी, ..., एक्स, वाई, जेड नहीं हैं।
वे केवल उपयोग किए जाने वाले कैप्चर करते हैं। यहां एक लंबे शॉट द्वारा स्टाइल ट्रम्प प्रदर्शन। – chris
@ क्रिस, क्या आप मुझे मानक के लिए संदर्भित कर सकते हैं? – xmllmx
@xmllmx मैं आपको एक अनुच्छेद में नहीं देख सकता, लेकिन एक वर्ग पर विचार करें जिसमें साइड इफेक्ट्स (एक फ़ाइल लिखना, cout, आदि) के साथ एक प्रतिलिपि है। यदि लैम्ब्डा ने उस प्रकार के एक अप्रयुक्त, असूचीबद्ध वस्तु को मूल्य के आधार पर कब्जा कर लिया और इसलिए प्रतिलिपि निर्माता को बुलाया, तो यह * बहुत बुरा * होगा। तो इस पर 'कानून' को देखे बिना, मैं कहूंगा कि यह बहुत निश्चित है। – us2012