myInvoke函数的参数是引用传递,为什么在经过三次调用myInvoke函数后,i的值不变呢?结果为什么是3个1,不应该是1 2 3 吗?
通过std::function&访问lambda中的变量,引用类型没有起到作用,如何解决?(语言-c++)
myInvoke函数的参数是引用传递,为什么在经过三次调用myInvoke函数后,i的值不变呢?结果为什么是3个1,不应该是1 2 3 吗?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 元气少女缘结神 2023-02-04 23:09关注
你是用lamda表达式直接作为函数的参数,但lamda作为std::function参数实际传的只是一个副本,所以相当于你是对这个副本引用,故没意义。
struct Lambda{ //Capture by value Lambda(int i):_i(i){} void operator()() const{ std::cout << ++_i << '\n'; } mutable int _i; }; void invoke2(const Lambda& fn) // # PASS LAMBDA BY REFERENCE { fn(); } int main() { int i{ 0 }; // Increments and prints its local copy of @i. Lambda count{i}; invoke2(count);//1 invoke2(count);//2 invoke2(count);//3 return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 matlab中使用gurobi时报错
- ¥15 WPF 大屏看板表格背景图片设置
- ¥15 这个主板怎么能扩出一两个sata口
- ¥15 不是,这到底错哪儿了😭
- ¥15 2020长安杯与连接网探
- ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
- ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
- ¥16 mybatis的代理对象无法通过@Autowired装填
- ¥15 可见光定位matlab仿真
- ¥15 arduino 四自由度机械臂