C++ 17将按值添加此对象的副本捕获,捕获规范为[*this]
.
这有用吗?它与捕获this
有何不同?这不可能在C++ 14中实现[tmp = *this]
吗?
用于解释为什么P0018R3使用[=, tmp = *this]
而不是[tmp = *this]
在他们的示例中的奖金.如果他们使用过[tmp = *this]
,那么C++ 14解决方案的所有列出的缺点都将被消除.
它有用吗?当你需要副本时它很有用*this
- 例如,当*this
lambda被评估时它本身不再有效.
它与捕获有什么不同this
?它创建了一个对象的副本,因此当评估lambda时,它的this
指针引用副本,而不是原始对象.
可以用C++ 14实现[tmp = *this]
吗?它可以,但[*this]
更方便,因为代码可以在没有前缀成员访问权限的情况下移动tmp.
.否则,特别是[=, tmp = *this]
当你想要引用副本时,可能会意外地引用原始对象的成员(特别是如果你习惯于剪切+粘贴编程). [=,*this]
在这种情况下是一种更安全的替代方案,因为原始对象不能从lambda体内部访问(至少不能通过this
指针).