#include <vector>
#include <algorithm>
void foo(int)
{
}
int main()
{
std::vector<int> v({ 1,2,3 });
std::for_each(v.begin(), v.end(), [](auto it) { foo(it+5); });
}
जब संकलित में ऑटो का प्रयोग, उदाहरण के ऊपर शुरू होता है इस तरह त्रुटि उत्पादन:एक लैम्ब्डा समारोह
h4.cpp: In function 'int main()':
h4.cpp:13:47: error: parameter declared 'auto'
h4.cpp: In lambda function:
h4.cpp:13:59: error: 'it' was not declared in this scope
यह मतलब यह है कि कीवर्ड auto
लैम्ब्डा भाव में नहीं किया जाना चाहिए?
यह काम करता है:
std::for_each(v.begin(), v.end(), [](int it) { foo(it+5); });
क्यों ऑटो कीवर्ड के साथ संस्करण काम नहीं करता है?
मुझे लगता है कि भले ही वह एक लैम्ब्डा है, यह अभी भी एक समारोह के रूप में काम, और एक हस्ताक्षर होना आवश्यक है। ऑटो के साथ आप कंपाइलर को इस प्रकार का फैसला करने देते हैं, इसलिए आपके लैम्ब्डा के पास संकलन-समय तक कोई वास्तविक हस्ताक्षर नहीं है। – Geoffroy
हमें अगले मानक में वास्तव में पॉलिमॉर्फिक लैम्बडास (एकेए निहित टेम्पलेट्स) की आवश्यकता है। यह सवाल सिर्फ कई मामलों में से एक है जहां लोग सिर्फ 'ऑटो' इस तरह से काम करते हैं। मुझे कोई कारण नहीं दिखता है। –
deft_code, मैं तुम्हारे साथ हूँ।यह ऑटो के लिए एक तार्किक उपयोग मामला है। – Robert