为何VC10的lambda[](&)函数用于map容器会引起拷贝?
我知道,在lambda函数中,如果()里面加上&就是引用迭代变量,不会引起变量拷贝,如下:
struct s{ int a,b; s():a(1),b(2){cout<<"ctor"<<endl;} s(const s& ss){a=ss.a;b=ss.b;cout<<"copy ctor"<<endl;} s& operator=(const s& ss){a=ss.a;b=ss.b;cout<<"operator="<<endl;return *this;}};void main(void){ vector<s> ms; ms.push_back(s()); ms.push_back(s()); cout<<"========================================\n"; for_each(ms.begin(),ms.end(),[](s& p){cout<<p.a<<p.b<<'\n';}); cout<<"========================================\n"; for(auto it=ms.begin();it!=ms.end();++it){ cout<<it->a<<it->b<<'\n'; }}struct s{ int a,b; s():a(1),b(2){cout<<"ctor"<<endl;} s(const s& ss){a=ss.a;b=ss.b;cout<<"copy ctor"<<endl;} s& operator=(const s& ss){a=ss.a;b=ss.b;cout<<"operator="<<endl;return *this;}};void main(void){ map<int,s> ms; ms.insert(make_pair(1,s())); ms.insert(make_pair(2,s())); cout<<"========================================\n"; for_each(ms.begin(),ms.end(),[](const pair<int,s>& p){cout<<p.second.a<<p.second.b<<'\n';}); cout<<"========================================\n"; for(auto it=ms.begin();it!=ms.end();++it){ cout<<it->second.a<<it->second.b<<'\n'; }}template<typename T1, typename T2>struct pair{ //.............. template<typename Other1, typename Other2> pair(const pair<Other1, Other2>& s); //pair<const int, s> p = pair<int, s>();};