gpt4 book ai didi

c++ - 在 C++ 中添加两个 lambda 函数

转载 作者:IT老高 更新时间:2023-10-28 22:33:37 24 4
gpt4 key购买 nike

我正在尝试添加两个 c++ lambda 函数。我的意思是:

假设你有两个函数 fg 每个都有一个或多个参数,比如说 f(x,y)g(x,y)。我想将它们都添加到一个新函数 h 中,如下所示:

h = f + g

评估应该是这样的:

h(x,y) = f(x,y) + g(x,y)

到目前为止,我已经尝试了以下代码,但它不起作用。最后的“cin”只是为了防止控制台自动关闭。

#include <iostream>
#include <functional>

using namespace std;


function<int (int,int)> add(function<int(int, int)> g, function<int(int, int)> f)
{
return [&](int x, int y)->int{return g(x, y) + f(x, y); };
}


int main()
{
int i = 0;

function<int (int,int)> sum = [](int x, int y)->int { return x + y; };
function<int (int,int)> mul = [](int x, int y)->int { return x * y; };
cout << sum(1, 2) << endl;
cout << mul(3, 4) << endl;

function<int(int, int)> s = add(sum, mul);

cout << s(2, 3) << endl;

cin >> i;
}

代码可以编译,但是当我尝试评估 s(2,3) 时它停止工作。它只是说程序停止工作,我必须关闭它。我正在使用 Visual Studio 2013。

有谁知道如何正确执行此操作?或者您是否知道任何可以开箱即用的库?

最佳答案

很微妙。

function<int (int,int)> add(function<int(int, int)> g, function<int(int, int)> f)
{
return [&](int x, int y)->int{return g(x, y) + f(x, y); };
// ^-- This here
}

您通过引用捕获 gf,并将这些引用存储在您返回的 std::function 中。但这些是对函数局部变量的引用,所以它们会在你返回的第二个地方悬空。因此,您的代码只是具有未定义的行为。

一个简单的解决方法是按值捕获[=]

关于c++ - 在 C++ 中添加两个 lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56404787/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com