引用捕获和在 lambda 中通过引用发送参数有什么区别 (C++)

What is the difference between a reference capture and sending a parameter by reference in a lambda (C++)

本文关键字:引用 参数 什么 区别 C++ lambda      更新时间:2023-10-16

我对lambdas相当陌生,我遇到了一个问题......

它们之间有什么区别:
[&](const std::vector<int> &v)
[](const std::vector<int> &v, std::vector<Chrono *> &m_chronoSets;)
我需要访问和修改m_chronoSets(可以通过使用 [&] 捕获整个上下文来访问

就时间而言(我想第一个可能会更慢,假设我们通过引用发送整个上下文? 和优化。

谢谢。

[&](const std::vector<int> &v){...}中,除了v之外,lambda访问的任何外部值都会被lambda本身内部的引用捕获。 lambda 的调用方不需要知道或关心这些值的任何内容,它只需要传入v参数的vector<int>

[](const std::vector<int> &v, std::vector<Chrono *> &m_chronoSets){...}中,lambda本身没有捕获任何内容,因此lambda的调用者必须显式地为v参数传递vector<int>,并为m_chronoSets参数传入std::vector<Chrono *>