相关疑难解决方法(0)

在lambda函数语法中,"捕获列表"的用途是什么?

这个问题的答案中,作为一个例子,这是一个计算元素总和的代码std::vector:

std::for_each(
    vector.begin(),
    vector.end(),
    [&](int n) {
        sum_of_elems += n;
    }
);
Run Code Online (Sandbox Code Playgroud)

我知道 lambda函数只是无名函数.

我理解 lambda函数语法,如下所述.

我不明白为什么lambda函数需要捕获列表,而普通函数则不需要.

  1. 捕获列表提供了哪些额外信息?
  2. 为什么普通功能不需要这些信息?
  3. lambda的功能不仅仅是无名功能吗?

c++ lambda c++11

21
推荐指数
3
解决办法
1万
查看次数

GCC错误地通过lambda函数中的引用捕获全局变量?

GCC似乎错误地通过lambda函数中的引用捕获全局变量,即使它们被指定为"按值捕获".此代码将编译并打印"a = 9":

#include <iostream>

int a = 10;

int main()
{
    [=]() { a = 9; } ();
    std::cout << "a = " << a << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

虽然这段代码不会编译:

#include <iostream>

int main()
{
    int a = 10;
    [=]() { a = 9; } (); // error: assignment of member 'main()::<lambda()>::a' in read-only object
    std::cout << "a = " << a << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但显式捕获全局值然后分配给它会产生错误:

#include <iostream>

int a = 10;

int main()
{
    [a]() …
Run Code Online (Sandbox Code Playgroud)

c++ lambda gcc c++11

13
推荐指数
1
解决办法
3267
查看次数

标签 统计

c++ ×2

c++11 ×2

lambda ×2

gcc ×1