引用捕获和在 lambda 中通过引用发送参数有什么区别 (C++)
What is the difference between a reference capture and sending a parameter by reference in a lambda (C++)
我对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 *>
。
相关文章:
- 将const引用参数初始化为默认参数会导致悬空引用吗
- 具有常量引用参数的函数模板专用化
- C++:常量引用参数
- 字符串引用参数的效率C++
- 通过非常量引用参数修改常量引用参数
- 如何将指针变量作为引用参数传递?
- C++初始化 std::function 时如何将占位符绑定到引用/引用参数?
- 移动类的成员作为常量引用参数传递
- C++带有适用于左值和右值的引用参数的函数
- constexpr 函数的常量引用参数:gcc/msvc vs clang/icc
- 如何使用类型特征将函数的通用引用参数限制为 r 值引用?
- 委托构造函数和引用参数
- 对 const 引用参数使用默认值会导致崩溃
- 为什么我们不允许将纯引用参数传递给 std::thread,但允许传递原始指针?
- 为什么我需要将默认引用参数定义为 const 以便为其分配一个左值?
- 将非左值作为常量引用参数传递.临时是在本地作用域还是在调用方作用域中创建的?
- 如何强制函数仅接受左值引用参数
- 模板引用参数推断失败C++
- 非类型引用参数可以在运行时修改,这是否意味着模板可以在运行时实例化?
- 将unique_ptr作为引用参数或常量传递unique_ptr引用