flyfish
Lambda 表达式也又称为 lambda,就像匿名函数,一个没有函数名字,只有函数体建立windows控制台应用程序
函数式写法
#include "stdafx.h" #include <iostream> int fun(int x, int y) { return x + y; } int _tmain(int argc, _TCHAR* argv[]) { std::wcout<<fun(1,2)<<std::endl; return 0; }
#include "stdafx.h" #include <iostream> int _tmain(int argc, _TCHAR* argv[]) { auto var= [](int x, int y) { return x + y; }; std::wcout<<var(1,2)<<std::endl; return 0; }
#include <iostream> #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { int a = 3; auto var = [a] (int x, int y){ return a + x + y; }; std::wcout <<var(10,20) << std::endl; }输出33
#include <iostream> #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { int a = 3; auto var = [&a] (int x, int y){ return a + x + y; }; a = 4; std::wcout <<var(10,20) << std::endl; }
输出34, 通过引用捕获 a,当a被重新赋值时就会影响该表达式的结果
3 捕获this指针,访问类的成员变量
#include "stdafx.h" #include <algorithm> #include <iostream> #include <vector> class CCalc { public: explicit CCalc(int nFactor) : m_nFactor(nFactor) { } void fun(const std::vector<int>& v) const { std::for_each(v.begin(), v.end(), [this](int n) { std::wcout << n * m_nFactor << std::endl; }); } private: int m_nFactor; }; int _tmain(int argc, _TCHAR* argv[]) { std::vector<int> v; v.push_back(1); v.push_back(2); CCalc o(10); o.fun(v); }输出10,20
原文地址:http://blog.csdn.net/flyfish1986/article/details/39961969