ath*_*hos 0 c++ lambda reference pass-by-reference
我正在观看CppCon 2015视频:为什么按价值捕捉是好的,而参考则是坏的.
Arthur解释说,但是我没理解...... Arthur说一个错误的引用是指一个局部变量然后退出,但退出堆栈后应该清理并且局部变量消失了,那么问题是什么?
BAD_increment_by返回一个闭包,其中包含一个引用y,但y在该函数返回时超出范围,因此它包含一个悬空引用.任何调用该闭包的尝试都是未定义的行为.
由于同样的原因,这是不好的:
int& BAD_copy(int x) { return x; }
Run Code Online (Sandbox Code Playgroud)
不好.
小智 5
我想尝试用另一种方式解释@Barry 的回答。
让我们写下里面发生的事情BAD_increment_by。
y.y通过引用捕获 lambda 。这将创建一个名为 的引用y。好吧,它们碰巧有相同的名称,这很令人困惑......我们将第一个称为“值y”,第二个称为“引用y”。y。BAD_increment_by。从 回来后BAD_increment_by,
y已不复存在。y仍然指向值y...y不存在!引用y指向不存在的东西!当有人调用 lambda 时,
y已阅读。y是引用,因此我们被重定向到值y。y还是只是我的幻觉?结论是:当调用 lambda 时,将使用悬空引用。该行为是未定义的。
| 归档时间: |
|
| 查看次数: |
185 次 |
| 最近记录: |