c++lambda式(匿名関数)の使用概要
2622 ワード
#include
using namespace std;
//[=] () mutable throw() -> int {}
/**
* lambda expression
* “Lambda ”(lambda expression) ,
* Lambda λ , lambda (lambda abstraction),
* , 。
*
* */
/**
*
* [capture](parameters) mutable ->return-type{statement}
*
* [capture]: 。 Lambda 。 ,[] Lambda 。 Lambda 。 Lambda ;
* (parameters): 。 。 , “()” ;
* mutable:mutable 。 ,Lambda const ,mutable 。 , ( );
* ->return-type: 。 。 -> 。 , , , ;
* {statement}: 。 , , 。
* ,lamda , , , 。
*
* [var] var;
* [=] ( this);
* [&var] var;
* [&] ( this);
* [this] this 。
* lambdb , lambdb
*
* */
int main(int argc,char **argv){
int m = 1;
auto val_lamda = [=]{return m+1;}; // m, lambda m , m m
auto ref_lamda = [&]{return m+1;}; // m,lambda m m.
cout< function { return [=](int y) { return x + y; }; };
auto gFunc = [](int x) -> function { return [=](int y) { return x + y; }; };
auto lFunc = gFunc(4); // lambda x=4 ,x=4 {}, [=] {}
auto llFunc = lFunc(5); //lFunc lambda , function, lambda ,5 y, y {}
// ,4 x=4 , ,y=5 , 。
std::cout << llFunc << std::endl; // 9
// , 。
auto hFunc = [](const function &f, int z) { return f(z) + 1; };
auto aa = hFunc(gFunc(7), 8);
int a1 = 111, b = 222;
auto func = [=, &b]() mutable { a1 = 22; b = 333; std::cout << "a:" << a1 << " b:" << b << std::endl; };
func();
std::cout << "a1:" << a1 << " b:" << b << std::endl;
a1 = 333;
auto func2 = [=, &a1] { a1 = 444; std::cout << "a:" << a1 << " b:" << b << std::endl; };
func2();
auto func3 = [](int x) -> function { return [=](int y) { return x + y; }; };
std::function f_display_42 = [](int x) { cout<