提问人:Mahashi 提问时间:7/28/2023 更新时间:7/31/2023 访问量:89
为什么我应该在 C++ 中使用函数而不是命名的 lambda
why should I use function instead of named lambdas in C++
问:
最近我在函数推导方面遇到了很多困难,当然 lambda 在这里被证明更灵活,但这样做我遇到了一个问题,为什么我应该使用函数而不是命名 lambdas?
例如:
namespace
{
auto foo(auto && arg1, auto && arg2){
return arg1 + arg2;
}
auto bar = [](auto&& arg1, auto && arg2){
return arg1 + arg2;
}
}
bar
在做模板和东西时更灵活,但是使用有什么缺点吗?实际编程中的性能或内存成本?我已经使用汇编输出运行了一些测试,并且在某些情况下证明 bar 的指令更少。bar
答:
0赞
Yakk - Adam Nevraumont
7/31/2023
#1
函数支持重载,支持将声明与实现分离。
此外,函数还参与一种称为“参数相关解析”的东西。搜索类命名空间中的函数时,不会在调用它们的行上显式命名命名该命名空间。
namespace some_ns {
struct some_struct {};
void some_function( some_struct );
}
如果你有
some_ns::some_struct bob;
some_function(bob);
然后将被找到,而不会在呼叫线路上提及。some_ns::some_function
some_ns
您可以使用继承技巧让 lambda 参与重载解析,但即便如此,它也是一组封闭的重载。
评论
bar