代码之家  ›  专栏  ›  技术社区  ›  kadina

Lambda函数正在提供意外的输出

c++
  •  0
  • kadina  · 技术社区  · 4 年前

    我当时正在做lambda函数 https://shaharmike.com/cpp/lambdas-and-functions/ 找到了下面的代码。

    int i = 0;
    auto x = [i]() mutable { cout << ++i << endl; };
    x();
    cout << i << endl;
    auto y = x;
    x();
    y();
    

    输出:

    1
    0
    2
    2
    

    2 回复  |  直到 4 年前
        1
  •  4
  •   Yakk - Adam Nevraumont    4 年前

    x 有一份 i . 我会叫它 x.i

    x(); -- prints ++x.i, aka 1
    cout << i; -- prints i, aka 0
    auto y = x; -- copies x into y.  x.i is 1, y.i is also 1.
    x(); -- prints ++x.i, aka 2
    y(); -- prints ++y.i, aka 2
    
        2
  •  1
  •   Blindy    4 年前

    价值 i 保存为lambda函数生成的函子的字段,因此在复制它时,该字段也会与值一起复制 1 字段并显示该值 2 2