当前位置:  开发笔记 > 编程语言 > 正文

C++ 17 lambda capture*this

如何解决《C++17lambdacapture*this》经验,为你挑选了1个好方法。

C++ 17将按值添加此对象的副本捕获,捕获规范为[*this].

这有用吗?它与捕获this有何不同?这不可能在C++ 14中实现[tmp = *this]吗?


用于解释为什么P0018R3使用[=, tmp = *this]而不是[tmp = *this]在他们的示例中的奖金.如果他们使用过[tmp = *this],那么C++ 14解决方案的所有列出的缺点都将被消除.



1> Toby Speight..:

它有用吗?当你需要副本时它很有用*this- 例如,当*thislambda被评估时它本身不再有效.

它与捕获有什么不同this?它创建了一个对象的副本,因此当评估lambda时,它的this指针引用副本,而不是原始对象.

可以用C++ 14实现[tmp = *this]吗?它可以,但[*this]更方便,因为代码可以在没有前缀成员访问权限的情况下移动tmp..否则,特别是[=, tmp = *this]当你想要引用副本时,可能会意外地引用原始对象的成员(特别是如果你习惯于剪切+粘贴编程). [=,*this]在这种情况下是一种更安全的替代方案,因为原始对象不能从lambda体内部访问(至少不能通过this指针).

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有