gpt4 book ai didi

c++ - 在 C++ 中调用 lambda 的哪种方式是最惯用的?

转载 作者:可可西里 更新时间:2023-11-01 15:48:37 24 4
gpt4 key购买 nike

我注意到 lambda 既可以使用函数指针工作,也可以使用 g++ 专用的 function 类型工作。

#include <functional>

typedef int(*fptr)(int, int);

int apply_p(fptr f, int a, int b) {
return f(a, b);
}

int apply_f(std::function<int(int, int)> f, int a, int b) {
return f(a, b);
}

void example() {
auto add = [](int a, int b) -> int {
return a + b;
};

apply_p(add, 2, 3); // doesn't give an error like I'd expect it to
apply_f(add, 2, 3);
}

我的问题是:其中哪些最适合使用?使用一种优于另一种的危险和/或好处是什么?

最佳答案

I noticed that lambdas both work using function pointers as well as the dedicated function type

如果 lambda 不捕获任何东西,那么它会退化为函数指针。

Which of these are most idiomatic to use?

都没有。如果要存储任意可调用对象,请使用 function。如果您只想创建和使用一个,请保持通用:

template <typename Function>
int apply(Function && f, int a, int b) {
return f(a,b);
}

您可以更进一步,使返回和参数类型通用;我会把它留作练习。

And what are the dangers and/or benefits of using one over the other?

函数指针版本仅适用于(非成员或静态)函数和非捕获 lambda,并且不允许传递任何状态;只有函数本身和它的参数。 function 类型可以包装任何可调用对象类型,有或没有状态,因此更普遍有用。然而,这有一个运行时成本:隐藏包装类型,调用它会涉及一个虚函数调用(或类似的);并且它可能需要动态内存分配来容纳大型类型。

关于c++ - 在 C++ 中调用 lambda 的哪种方式是最惯用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26754805/

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