您的位置:首页 > 编程语言 > C语言/C++

C++11中的匿名函数(lambda函数,lambda表达式)

2017-08-24 23:37 148 查看
C++11提供了对匿名函数的支持,称为Lambda函数(也叫Lambda表达式). Lambda表达式具体形式如下:

[capture](parameters)->return-type{body}

如果没有参数,空的圆括号()可以省略.返回值也可以省略,如果函数体只由一条return语句组成或返回类型为void的话.形如:

[capture](parameters){body}

Lambda函数可以引用在它之外声明的变量. 这些变量的集合叫做一个闭包. 闭包被定义在Lambda表达式声明中的方括号[]内. 这个机制允许这些变量被按值或按引用捕获.

规则如下:

[]        //未定义变量.试图在Lambda内使用任何外部变量都是错误的.

[x, &y]   //x 按值捕获, y 按引用捕获.

[&]       //用到的任何外部变量都隐式按引用捕获

[=]       //用到的任何外部变量都隐式按值捕获

[&, x]    //x显式地按值捕获. 其它变量按引用捕获

[=, &z]   //z按引用捕获. 其它变量按值捕获

下面举个例子

1.函数指针方式

//定义一个函数指针  

void(*p)();  

p = [](){  

    std::cout << "The function is the Niming function!" << std::endl;  

};  

//通过指针来调用函数  

p();  

2.auto方式

auto p = [](){  

    std::cout << "The function is the Niming function!" << std::endl;  

};  

//通过指针来调用函数  

p();

详细使用例子见:http://blog.csdn.net/qiuchunhuige/article/details/77523083
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: