weixin_37765963 2021-04-03 23:24 采纳率: 0%
浏览 12

c++ lambda表达式输出结果

下面这个lambda 的输出结果为什么是这个?求大神讲解下。

#include <iostream>
#include <functional>
using namespace std;

auto g1(int x)
{
    return [&x](int y){return x+y;};
}
auto g2(int& x)
{
    return [&x](int y){return x+y;};
}

int main()
{
    int x = 1;
    auto f1 = g1(x);
    auto f2 = g2(x);

    cout << f1(2) << "," << f2(2) << endl;

    x = 2;
    cout << f1(2) << "," << f2(2) << endl;

    cin >> x;
    return 0;
}

//输出结果:6422018,3
//        6422018,4
  • 写回答

2条回答 默认 最新

  • lemon-l 2021-04-03 23:36
    关注

    这,因为g1返回的lamdba捕捉的是局部对象x的引用,当g1函数返回的时候g1的x就被释放了,这个时候再使用返回的lambda函数就不知道x的值是多少了,而g2的参数是引用,lamdba里面使用的x实际上就是main函数里面的x。

    评论

报告相同问题?

悬赏问题

  • ¥200 基于同花顺supermind的量化策略脚本编辑
  • ¥20 Html备忘录页面制作
  • ¥15 黄永刚的晶体塑性子程序中输入的材料参数里的晶体取向参数是什么形式的?
  • ¥20 数学建模来解决我这个问题
  • ¥15 计算机网络ip分片偏移量计算头部是-20还是-40呀
  • ¥15 stc15f2k60s2单片机关于流水灯,时钟,定时器,矩阵键盘等方面的综合问题
  • ¥15 YOLOv8已有一个初步的检测模型,想利用这个模型对新的图片进行自动标注,生成labellmg可以识别的数据,再手动修改。如何操作?
  • ¥30 NIRfast软件使用指导
  • ¥20 matlab仿真问题,求功率谱密度
  • ¥15 求micropython modbus-RTU 从机的代码或库?