首页 > 编程知识 正文

C 新特性11匿名函数mutable,c实现匿名函数

时间:2023-05-03 15:38:20 阅读:260588 作者:916

mutable
使用情形:个人理解yqdsl需要匿名函数从外部捕获参数并在函数内部进行修改时,这个时候就可以使用mutable关键字。
之前我们在类中的常成员函数中的变量是不可以修改的,但是一旦定义为mutable就可以修改。
1.未增加mutable不可以修改参数

int main() {int t = 10;auto f = [t]() {return ++t;};}


2. 增加mutable之后代表t是可以修改的

#include <iostream>using namespace std;int main() {int t = 10;//按值捕获,内部修改不会改变t的值auto f = [t]() mutable{return ++t;};cout << f() << endl;cout << f() << endl;cout << t << endl;}


3. 两个问题:
(1)为什么main函数中t的值没有修改?
这是因为按值捕获,内部修改不会改变t的值。
(2)那为什么匿名函数内部的t会发生改变呢?
运行程序可以得到如下结果:
main函数中t的地址:

匿名函数中t的地址:

main函数和匿名函数中t的地址是不同的,大家应该也看出来了。
原因:在匿名函数中的t是从main函数中拷贝出来的,在匿名函数作用域中是独一无二的,也是与main中的不是一个t。
4. 相同名称参数在不同匿名函数中的值
下面程序赋值之前的匿名函数,都调用t。

#include <iostream>using namespace std;int main() {int t = 10;//按值捕获,内部修改不会改变t的值auto f = [t]() mutable{return ++t;};auto f2 = [t]() mutable {return ++t;};cout << f() << endl;cout << f2() << endl;cout << f() << endl;cout << f2() << endl;cout << t << endl;}

运行之后可以看到:在不同的匿名函数中会拷贝一份专属于当前作用域的变量,而不会相互干扰。
5.学习视频地址:匿名函数mutable
6.学习笔记:匿名函数mutable笔记

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。