跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请教下 lambda 函数的捕获值列表
未分類
1 4 月 2021

请教下 lambda 函数的捕获值列表

请教下 lambda 函数的捕获值列表

資深大佬 : auto8888 0

class Testc { public:     void fun1(int *&p)     {         p = new int();         *p =2;     }     void fun2()     {         std::thread t([=] {(fun1)( p);});         if(t.joinable())             t.detach();     }     int *p; }; 

fun1 的参数是引用传递,为什么 fun2 用[=]捕获也编译通过,特殊在于参数是类的成员。

如果把 fun1 移到全局函数,为什么 fun2 用[this]捕获也编译通过

void fun1(int *&p) {     p = new int();     *p =2; } class Testc { public:     void fun2()     {         std::thread t([this] {(fun1)( p);});         if(t.joinable())             t.detach();     }     int *p; }; 

就有点懵逼了

大佬有話說 (4)

  • 主 資深大佬 : auto8888

    刚试了一下,貌似用引用捕获也不能修改外部变量???

    我,裂开来

  • 資深大佬 : morningtzh

    https://zh.cppreference.com/w/cpp/language/lambda

    直接看 cppreference 吧。

    lambda 接收的是值,当然不会改外部变量咯

  • 資深大佬 : mogg

    不太懂,主想问什么?
    这里有一个作用域的概念,闭包里的 fun1,p 其实是 this.fun1,this.p
    测试了一下( detach 改成 join ),没什么问题啊……
    测试代码 https://paste.ubuntu.com/p/HrsHf5zSXS/

  • 主 資深大佬 : auto8888

    @mogg 我也试了一下,那这样的话闭包能改变俘获的值啊( this.p )

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具