Lambda expressions: capture, mutable, generic
captures, mutable semantics और generic auto parameters वाली lambdas लिखें।
Lambda expressions: capture, mutable, generic, CoddyKit पर C++ Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह C++ Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
लैम्ब्डा क्या है
लैम्ब्डा एक इनलाइन अनाम फ़ंक्शन ऑब्जेक्ट है। जहाँ आप अन्यथा कोई छोटा नामित फ़ंक्शन या operator() वाला स्ट्रक्चर लिखते, वहाँ इसका उपयोग करें।
auto square = [](int x) { return x * x; };
std::cout << square(5); // 25वाक्यविन्यास की संरचना
लैम्ब्डा के चार भाग होते हैं:
[capture]— आसपास के दायरे से किन चरों का उपयोग करना है(parameters)— फ़ंक्शन की पैरामीटर सूची जैसा-> return_type— वैकल्पिक, अक्सर स्वतः निर्धारित{ body }
रिक्त ग्रहण
[] का अर्थ है "कुछ भी ग्रहण न करें।" लैम्ब्डा केवल वैश्विक और स्थैतिक चरों तक पहुँचता है।
auto add = [](int a, int b) { return a + b; };मान द्वारा ग्रहण
चरों को ग्रहण खंड में सूचीबद्ध करके उनकी प्रतिलिपियाँ लैम्ब्डा में लें।
int n = 5;
auto times = [n](int x) { return x * n; };
n = 10;
std::cout << times(3); // 15 (captured n was 5)संदर्भ द्वारा ग्रहण
संदर्भ द्वारा ग्रहण करने के लिए & उपसर्ग लगाएँ। लैम्ब्डा के भीतर किए गए परिवर्तन बाहरी चर को प्रभावित करते हैं।
int counter = 0;
auto inc = [&counter]() { ++counter; };
inc(); inc(); inc();
std::cout << counter; // 3डिफ़ॉल्ट ग्रहण: [=] और [&]
[=] के साथ उपयोग किए गए सभी तत्वों को मान द्वारा, या [&] के साथ सभी तत्वों को संदर्भ द्वारा ग्रहण करें। सावधानी से उपयोग करें — जहाँ संभव हो, स्पष्ट रहें।
auto f = [=]() { return a + b; }; // copies a, b
auto g = [&]() { return a + b; }; // references a, bपरिवर्तनशील लैम्ब्डा
डिफ़ॉल्ट रूप से, मान द्वारा ग्रहण किए गए तत्व लैम्ब्डा के भीतर const होते हैं। उन्हें बदलने की अनुमति देने के लिए mutable जोड़ें — ये परिवर्तन केवल लैम्ब्डा की प्रतिलिपि को प्रभावित करते हैं।
int n = 5;
auto f = [n]() mutable {
n += 1; // OK because of mutable
return n;
};
f(); f(); // returns 6, then 7
std::cout << n; // still 5 in outer scopeवापसी प्रकार का निर्धारण
कंपाइलर बॉडी से वापसी प्रकार निर्धारित करता है। आवश्यकता होने पर इसे स्पष्ट रूप से लिखें।
auto half = [](int x) -> double { return x / 2.0; };सामान्य लैम्ब्डा (C++14)
ऐसा सामान्य लैम्ब्डा पाने के लिए पैरामीटर सूची में auto का उपयोग करें, जो किसी भी प्रकार पर काम करता हो।
auto print = [](const auto& x) { std::cout << x << "\n"; };
print(42); // int
print("hello"); // const char*
print(3.14); // doubleफ़ंक्शन तर्क के रूप में लैम्ब्डा
STL एल्गोरिदम लैम्ब्डा को शर्त-जाँच फ़ंक्शन और रूपांतरण के रूप में स्वीकार करते हैं।
std::vector<int> v = {5, 2, 8, 1};
std::sort(v.begin(), v.end(), [](int a, int b) { return a > b; });लैम्ब्डा फ़ंक्शन ऑब्जेक्ट होते हैं
पर्दे के पीछे, कंपाइलर operator() वाला एक वर्ग बनाता है। आप लैम्ब्डा को std::function या auto में संग्रहीत कर सकते हैं।
त्वरित जाँच
[n](int x) { return x * n; } वाले लैम्ब्डा के भीतर, क्या लैम्ब्डा को mutable बनाए बिना n को मान दे सकते हैं?
पुनरावलोकन
लैम्ब्डा अनाम, इनलाइन फ़ंक्शन ऑब्जेक्ट होते हैं। मान या संदर्भ द्वारा ग्रहण करें, मान द्वारा ग्रहण किए गए तत्वों को बदलने के लिए mutable लगाएँ, और C++14+ में सामान्य लैम्ब्डा के लिए auto पैरामीटर का उपयोग करें।
एआई शिक्षक के साथ C++ सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 51
- पाठ
- 203
अक्सर पूछे जाने वाले प्रश्न
क्या “Lambda expressions: capture, mutable, generic” पाठ निःशुल्क है?
हाँ — C++ Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “Lambda expressions: capture, mutable, generic” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Lambda expressions: capture, mutable, generic” में मैं क्या सीखूँगा?
captures, mutable semantics और generic auto parameters वाली lambdas लिखें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C++ Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या C++ Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C++ Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“Lambda expressions: capture, mutable, generic” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस C++ Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर C++ Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- auto, decltype और type deduction
- Range-based for, nullptr और enum class
- Lambda expressions: capture, mutable, generic
- Structured bindings और if-init C++17