मैं निम्नलिखित कोडलैम्ब्डा अभिव्यक्ति (MSVC++ बनाम जी ++)
#include <algorithm>
#include <iostream>
#include <vector>
#include <functional>
int main()
{
typedef std::vector<int> Vector;
int sum=0;
Vector v;
for(int i=1;i<=10;++i)
v.push_back(i);
std::tr1::function<double()> l=[&]()->double{
std::for_each(v.begin(),v.end(),[&](int n){sum += n; //Error Here in MSVC++});
return sum;
};
std::cout<<l();
std::cin.get();
}
उपरोक्त कोड, जबकि यह g++ 4.5
के साथ ठीक संकलित MSVC++ 10
पर एक त्रुटि पैदा करता है। उत्पादित त्रुटि 1 IntelliSense: invalid reference to an outer-scope local variable in a lambda body c:\users\super user\documents\visual studio 2010\projects\lambda\lambda.cpp 19 46 lambda
तो है, वहाँ स्पष्ट रूप से स्थानीय लैम्ब्डा अभिव्यक्ति (std::for_each
अंदर) के अंदर एक नया वेरिएबल बनाए बिना बाहरी-गुंजाइश चर sum
उपयोग करने के लिए किसी भी अन्य तरीका है?
g++ 4.5
पर कोड ठीक संकलित करता है। मानक (n3000 मसौदा) इसके बारे में कुछ कहना है? (मैं सी के ++ एक प्रति नहीं है -? 0x (1x) वर्तमान में मानक)
VS10 doees लैम्ब्डा कब्जा दायरे से संबंधित कुछ ज्ञात कीड़े, som सबसे अधिक संभावना जीसीसी सही इस मामले में है। – jalf
बस हाल ही में एक मानक ड्राफ्ट डाउनलोड करें - Google पर "सी ++ मानक" की तलाश में आप इसके लिए एक लिंक देते हैं। यह देखने के लिए एक दिलचस्प सीखने का अनुभव है :) –
ध्यान दें कि नवीनतम मसौदा एफसीडी, एन 30 9 2 है, जिसे आप [डब्लूजी 21 वेबसाइट से डाउनलोड कर सकते हैं] (http://www.open-std.org/jtc1/ sc22/wg21/दस्तावेज़/कागजात/2010/n3092.pdf) (** चेतावनी: 10.5 एमबी पीडीएफ **)। –