C++(一)

本文深入探讨了C++中Lambda表达式的应用,包括闭包的概念、引用的使用以及如何将Lambda函数作为参数传递。重点阐述了Lambda函数的语法、性能考量、与普通函数的区别,并通过实例展示了如何在实际编程中灵活运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

auto

vector<int> number(5,10);
for(auto& e:number)
{
  e=e+2;
  cout<<(int)e<<endl;
}

纯虚函数在基类中只有声明而没有定义,必须在子类中加以实现,相当于java中的接口。虚函数可以在基类中定义,在子类中可以重写也可以不重写虚函数。

virtual void func()=0;

在函数前面添加virtual虽然牺牲一些性能,但增加了面向对象的多态性。

lambda表达式、匿名函数

[capture] (parameters)->returntype{body},返回值可以省略。
[capture]称为闭包,lambda函数可以引用在它之外声明的变量,这些变量的集合称为闭包,闭包变量分为按值或按引用使用。

[ ] //未定义变量,在lambda中使用任何变量都是错误的
[x,&y] //x按值使用,y按引用使用
[&] //用到的任何外部变量都隐式按引用捕获
[=] //用到的任何外部变量都隐式按值捕获
[&, x] //x显式地按值捕获. 其它变量按引用捕获
[=, &z] //z按引用捕获. 其它变量按值捕获

lambda函数是函数对象类型,使用auto类型存储lambda函数。

auto f1=lambda_function();
auto f3=new auto(lambda_function());
decltype(f1) f2=lambda_function();

如果要把lambda函数作为一个参数来传递,形参的类型必须是模板类型或者std::function对象。
一个没有指定任何捕获的lambda函数,可以显式地转换成一个具有相同声明形式的函数指针。

auto lambda_func=[][int x] {…};
void (*func_ptr)(int)=lambda_func;
func_ptr(5);

Function

std::function的实例对任何可调用的目标实体进行存储、复制和调用操作,这些目标实体包括普通函数、lambda表达式、函数指针、类方法等。

std::function

引用
  1. 引用就是一个变量的别名,对引用的操作和对变量直接操作完全一样。
    类型标识符 &引用名=目标变量名;
    声明引用时必须对它进行初始化,引用本身不占存储单元,对引用求地址和对目标变量求地址一样。
    传递引用给函数与传递指针的效果一样,一般引用参数定义为常引用。
    const 类型标识符 &引用名=目标变量名;
  2. 引用可以达到多态的效果,一个基类的引用可以指向它的派生类型实例,该引用只能用来访问派生类实例中从基类继承下来的成员。
  3. C++中,临时对象都是const类型的。引用作为返回值:
    函数定义格式: 类型标识符 &函数名(形参列表及类型说明){函数体}
    注意不能返回局部变量的引用;不能返回函数内部new分配的内存的引用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值