C ++ में [=] का क्या अर्थ है?


93

मैं जानना चाहता हूं कि क्या [=]करता है? यहाँ एक छोटा उदाहरण है

template <typename T>
std::function<T (T)> makeConverter(T factor, T offset) {
    return [=] (T input) -> T { return (offset + input) * factor; };
}

auto milesToKm = makeConverter(1.60936, 0.0);

[]इसके बजाय कोड कैसे काम करेगा [=]?

मेरा ये अनुमान है

std::function<T (T)>

एक फ़ंक्शन प्रोटोटाइप का अर्थ है जो (T)तर्क और वापसी प्रकार के रूप में मिलता है T?


4
यह विचित्र रूप से कुछ के लिए अत्यधिक मतदान है जो 3 अलग-अलग अनारक्षित प्रश्न पूछने के लिए लगता है और C ++ 11 में एक लंबोदर अभिव्यक्ति क्या है
अंडरस्कोर_ड

मैं @underscore_d से सहमत हूं - ऐसा लगता है कि कुछ क्लिक रेटिंग को बढ़ा रहे हैं, है ना? :)
BitTickler

जवाबों:


108

[=]आप की बात कर रहे हैं का हिस्सा है पर कब्जा सूची लैम्ब्डा अभिव्यक्ति के लिए। यह C ++ को बताता है कि लैम्ब्डा एक्सप्रेशन के अंदर कोड को इनिशियलाइज़ किया गया है ताकि लैम्बडा को उसके बनने पर उपयोग होने वाले सभी लोकल वैरिएबल्स की कॉपी मिल जाए। यह लैंबडा अभिव्यक्ति को संदर्भित करने में सक्षम होने के लिए आवश्यक है factorऔर offset, जो फ़ंक्शन के अंदर स्थानीय चर हैं।

यदि आप के [=]साथ प्रतिस्थापित करते हैं [], तो आपको एक कंपाइलर त्रुटि मिलेगी क्योंकि लैम्ब्डा अभिव्यक्ति के अंदर कोड को पता नहीं चलेगा कि चर offsetऔर factorसंदर्भ क्या हैं। कई कंपाइलर ऐसा करने पर अच्छे डायग्नोस्टिक एरर मैसेज देते हैं, इसलिए इसे आजमाएं और देखें कि क्या होता है!


13
"यह आवश्यक है" - यह सटीक विकल्प आवश्यक नहीं है; हम भी लिख सकता है [&], [=offset, =input]आदि
एम.एम.

1
@MM - क्या यह स्थानीय लोगों के संदर्भ को कैप्चर नहीं करता है?
बेकार

5
@MM यहां रेफरेंस कैप्चर का उपयोग करना एक समस्या होगी क्योंकि लैम्ब्डा वापस आते ही उन स्थानीय चरों के जीवनकाल समाप्त हो जाएंगे। आप सही हैं कि हम व्यक्तिगत चर को अलग-अलग सूचीबद्ध कर सकते हैं, हालांकि।
टेम्प्लेटेटीपीडिफ

45

यह एक लम्बा कब्जा सूची है। भेड़ के बच्चे के लिए उपलब्ध चर बनाता है। आप [=]मान द्वारा कौन सी प्रतियों का उपयोग कर सकते हैं , या [&]जो संदर्भ से गुजरता है।


3
तुम भी []जो कुछ भी कब्जा नहीं करता उपयोग कर सकते हैं । :)
डैनियल कामिल कोजार
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.