C++11 Lambda 表达式

来源:互联网 发布:php薪资待遇 编辑:程序博客网 时间:2024/05/20 07:36

转自:http://www.cnblogs.com/hujian/archive/2012/02/14/2350306.html


class CTest{public: CTest() : m_nData(20) { NULL; } void TestLambda() {  vector<int> vctTemp;  vctTemp.push_back(1);  vctTemp.push_back(2);  // 无函数对象参数,输出:1 2  {   for_each(vctTemp.begin(), vctTemp.end(), [](int v){ cout << v << endl; });  }  // 以值方式传递作用域内所有可见的局部变量(包括this),输出:11 12  {   int a = 10;   for_each(vctTemp.begin(), vctTemp.end(), [=](int v){ cout << v+a << endl; });  }  // 以引用方式传递作用域内所有可见的局部变量(包括this),输出:11 13 12  {   int a = 10;   for_each(vctTemp.begin(), vctTemp.end(), [&](int v)mutable{ cout << v+a << endl; a++; });   cout << a << endl;  }  // 以值方式传递局部变量a,输出:11 13 10  {   int a = 10;   for_each(vctTemp.begin(), vctTemp.end(), [a](int v)mutable{ cout << v+a << endl; a++; });   cout << a << endl;  }  // 以引用方式传递局部变量a,输出:11 13 12  {   int a = 10;   for_each(vctTemp.begin(), vctTemp.end(), [&a](int v){ cout << v+a << endl; a++; });   cout << a << endl;  }  // 传递this,输出:21 22  {   for_each(vctTemp.begin(), vctTemp.end(), [this](int v){ cout << v+m_nData << endl; });  }  // 除b按引用传递外,其他均按值传递,输出:11 12 17  {   int a = 10;   int b = 15;   for_each(vctTemp.begin(), vctTemp.end(), [=, &b](int v){ cout << v+a << endl; b++; });   cout << b << endl;  }  // 操作符重载函数参数按引用传递,输出:2 3  {   for_each(vctTemp.begin(), vctTemp.end(), [](int &v){ v++; });   for_each(vctTemp.begin(), vctTemp.end(), [](int v){ cout << v << endl; });  }  // 空的Lambda表达式  {   [](){}();   []{}();  } }private: int m_nData;};

{   int n = [] (int x, int y)->int{ return x + y; }(5, 4);   cout << n << endl;}运行结果为:9


{   auto f = [] (int x, int y) { return x + y; };   cout << f(21, 12) << endl;}运行结果为:33



0 0
原创粉丝点击