相关疑难解决方法(0)

什么是C++仿函数及其用途?

我一直在听C++中的仿函数.有人可以给我一个关于它们是什么的概述以及在什么情况下它们会有用吗?

c++ functor function-object function-call-operator

822
推荐指数
8
解决办法
44万
查看次数

如果全局函数使用非局部变量,那么它是一个闭包是否正确?

我一直很困惑什么是 C++ 中的闭包。我读过这篇什么是“关闭”?但几乎所有答案都指的是 JavaScript,但我认为 C++ 和 JavaScript 之间的闭包存在一些差异。所以我发现很难将闭包的 JavaScript 描述与 C++ 相匹配。

例如,几乎所有答案都以函数返回函数为例来演示 JavaScript 中的闭包。但是我在 C++ 中没有找到类似的模式。

更重要的是,在 JavaScript 中没有所谓的“捕获列表”这样的东西。


  1. 有人告诉我,如果一个函数使用非局部变量(来自外部作用域或全局作用域),那么它就是一个闭包。这是正确的吗?

示例 1:

    int a = 3;

    int am_I_a_closure(int c){
        return c + a;
    }

    int main(){
    }
Run Code Online (Sandbox Code Playgroud)
  1. 为什么需要捕获列表?C++ 中的 lambda 不能像 JavaScript 嵌套函数一样工作吗?或者换句话说,C++ 中的 lambda 不能像访问全局(非局部)变量的全局函数一样工作吗?

我的意思是,通过正常的名称查找过程,如果在当前作用域中找不到名称,则在外部作用域中找到它,然后在更多外部作用域中找到它...

为什么需要捕获列表?为什么需要捕获外部作用域变量?不能通过正常的名称查找来完成吗?

示例 2:

int main(){
    int a = 3;
    {
        int b = 5;
        {
            int c = 4;
            {
                std::cout << a+b+c <<std::endl;
            }
        }
    }
}

Run Code Online (Sandbox Code Playgroud)

示例 3: …

c++ lambda closures

2
推荐指数
1
解决办法
182
查看次数