C++11常用特性介绍——Lambda表达式
一、C++11采用配对的方括号[]来创建一个匿名函数并执行,如:
#include <iostream>
int main()
{
auto func = []{
std::cout << "hello world!!!" << std::endl;
};
func();
}
捕获选项:
1)[]:不捕获任何变量(没有使用任何函数对象参数)。
2)[=]:拷贝捕获(函数体内可以使用Lambda所在作用范围内所有可见局部变量,包括Lambda所在类的this,并且是值传递方式,函数体内不可以修改局变量)。
3)[&]:引用捕获(函数体内可以使用Lambda所在作用范围内所有可见局部变量,包括Lambda所在类的this,并且是引用传递方式,函数体内可以修改局变量)。
4)[this]:捕获this指针(函数体内可以使用Lambda所在类中的成员变量)。
5)[a]:指定拷贝(将变量a按值进行传递,函数体内不能修改传递进来的a拷贝,因为默认情况下函数是const的,修改传递进来的a拷贝,可以添加mutable修饰符)。
6)[&a]:指定引用(将a按引用进行传递,函数体内可以修改传递进来的bar拷贝)。
7)[a,&b]:混合引用(将a按拷贝传递,b按引用传递)。
8)[=,&a]:混合引用(将其它可见局部变量按拷贝传递,b按引用传递)。
9)[a,&]:混合引用(将a按拷贝传递,其它可见局部变量按拷贝传递)。
实例:
1、不捕获任何变量
#include <iostream>
int main()
{
auto func = []{std::cout << "Hello World!!! << std::endl;} //输出:Hello World!!!
func();
}
2、拷贝捕获
include <iostream>
int main()
{
int i = 1024;
auto func = [=]{std::cout << i << std::endl;} //输出1024
func();
}
3、引用捕获
include <iostream>
int main()
{
int i = 1024;
auto func = [&]{std::cout << ++i << std::endl;} //输出1025
func();
}
4、捕获this指针
#include <iostream>
class Student
{
public:
Student(int age = 0) : _age(age){}
Show_Age()
{
auto func = [this]{
std::cout << this->_age << std::endl;
};
func();
}
private:
int _age;
}
int main()
{
Student student(1024);
student.Show_Age();
}
C++11常用特性介绍——Lambda表达式的更多相关文章
- C++11常用特性介绍——auto类型修饰符
1.C++11常用特性介绍 从本篇开始介绍C++11常用特性,大致分:关键字及新语法.STL容器.多线程.智能指针内存管理,最后讲一下std::bind和std::function 二.关键字和新语法 ...
- c++11 新特性之lambda表达式
写过c#之后,觉得c#里的lambda表达式和delegate配合使用,这样的机制用起来非常爽.c++11也有了lambda表达式,形式上有细小的差异.形式如下: c#:(input paramete ...
- C++11 新特性:Lambda 表达式
参考文章:https://blogs.oracle.com/pcarlini/entry/c_1x_tidbits_lambda_expressions 或许,Lambda 表达式算得上是 C++ 1 ...
- C++11新特性(3) lambda表达式(1)
C++11加入了一项名为lambda表达式的新功能.通过这项功能能编写内嵌的匿名函数,而不必编写独立函数或函数对象,使得代码更加理解. lambda表达式包括下面部分. [capture_block] ...
- C++11新特性之一——Lambda表达式
C++11新特性总结可以参考:http://www.cnblogs.com/pzhfei/archive/2013/03/02/CPP_new_feature.html#section_6.8 C++ ...
- C++11 新特性之 Lambda表达式
lambda表达式能够用于创建并定义匿名的函数对象,以简化编程工作 Lambda的语法例如以下: [函数对象參数](操作符重载函数參数)->返回值类型{函数体} []内的參数指的是Lambda表 ...
- C++11常用特性介绍——decltype关键字
一.decltype的意义 有时我们只想从表达式的类型推断出要定义的变量类型,但是不想用其值进行初始化的时候,C++11新标准引入了decltype类型说明符,它的作用是选择并返回操作数的数据类型,在 ...
- C++11常用特性介绍——左值引用、右值引用
一.左值.右值 1)左值:可以放在赋值号左侧.可以被赋值的值:左值必须要在内存中有实体. 2)右值:必须放在赋值号右侧.取出值赋值给其它变量:右值可以在内存中也可以在CPU寄存器中. 二.引用 引用是 ...
- C++11常用特性介绍——array容器
std::array是具有固定大小的数组,支持快速随机访问,不能添加或删除元素,定义于头文件<array>中. 一.概要 array是C++11新引入的容器类型,与内置数组相比,array ...
随机推荐
- VS2017 + Windows10编译C++ MongoDB驱动
转载地址:https://blog.csdn.net/sqcfj/article/details/86716831 mongoDB有两个接口库:mongo-c-driver和mongo-cxx-dri ...
- ASP.NET Core Web API中实现全局异常捕获与处理
处理全局异常 HANDLING ERRORS GLOBALLY 在上面的示例中,我们的 action 内部有一个 try-catch 代码块.这一点很重要,我们需要在我们的 action 方法体中处理 ...
- js加密(四)landChina
1. url:https://www.landchina.com/default.aspx?tabid=226 2. target: 3. 简单分析 3.1 打开fiddler和chorme无痕浏览器 ...
- HDU - 5187 zhx's contest(快速幂+快速乘法)
作为史上最强的刷子之一,zhx的老师让他给学弟(mei)们出n道题.zhx认为第i道题的难度就是i.他想要让这些题目排列起来很漂亮. zhx认为一个漂亮的序列{ai}下列两个条件均需满足. 1:a1. ...
- angular清空node_modules
安装全局包 npm install rimraf -g 执行清空命令 rimraf node_modules
- springboot jar文件打zip包运行linux环境中
1.添加打包配置文件 1.1 assembly.xml <assembly xmlns="http://maven.apache.org/plugins/maven-assembly ...
- 【Python】一些函数
Python 数字类型转换 有时候,我们需要对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可. int(x) 将x转换为一个整数. float(x) 将x转换到一个浮点数. ...
- 每天进步一点点------Altium Designer Rules规则详解
对于PCB的设计, AD提供了详尽的10种不同的设计规则,这些设计规则则包括导线放置.导线布线方法.元件放置.布线规则.元件移动和信号完整性等规则.根据这些规则, Protel DXP进行自动布局和自 ...
- openstack自动化搭建脚本
Openstack平台部署+节点扩容 1)搭建脚本 #!/bin/bash #openstack私有云平台部署 #脚本使用前提:三台虚拟机openstack(ip地址:.11至少4G内存,100G硬盘 ...
- cs/bs
c(客户端)/s服务器:使用前必须安装,更新是,c s同时更新,不能跨频繁太,采用自由协议,相对来说安全. b(浏览器)/s:本质上还是cs ,只是使用了浏览器:如京东,淘宝.无需安装,客户端不需要更 ...