【发布时间】:2019-10-03 11:30:25
【问题描述】:
我注意到在项目中我在很多地方工作,其中 lambda 表达式在此捕获指针,但不使用它。它会导致某种开销,例如指针复制,还是被编译器优化?
void MyClass::SomeFunction()
{
...
grid->ForEachItem([this](const Item& item)
{
// Some code doesn't use this
}
}
同样的问题专门用于通过引用捕获所有内容 [&]
【问题讨论】:
-
可能是,也可能不是。无论如何,它取决于下一个阅读它的开发人员,那么为什么要写它呢?
-
我敢打赌编译器会优化掉未使用的变量,但我不确定。无论哪种方式,我都不喜欢使用“this”和“&” lambda 捕获,因为这会带来麻烦和缺乏封装。另外,如果没有使用,为什么不直接删除它,因为它只会给阅读代码的人带来混乱?
-
我当然会删除它,但有趣的是它会导致一些开销。如果它使用,如果它只是一个指针副本