为什么在C++中应该使用函数而不是命名的lambda表达式

wfveoks0  于 2023-08-09  发布在  其他
关注(0)|答案(1)|浏览(101)

最近,我一直在与函数推导作斗争,当然lambdas在这里被证明更灵活,但这样做我遇到了一个问题,为什么我应该使用函数而不是命名的lambdas?
例如,在

namespace
{
auto foo(auto && arg1, auto && arg2){
    return arg1 + arg2;
}

auto bar = [](auto&& arg1, auto && arg2){
    return arg1 + arg2;
}
}

字符串
bar在做模板和其他东西时更灵活,但是使用bar有什么缺点吗?在真实的编程中的性能或内存成本?我用汇编输出运行了一些测试,在某些情况下,bar的指令甚至更少。

xmjla07d

xmjla07d1#

函数支持重载,并支持从实现中分离声明。
此外,函数参与了一种称为“参数相关解析”的东西。搜索类的命名空间中的函数时,不会在调用它们的行上显式命名空间。

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表达式参与重载解析,但即使这样,它也是一组封闭的重载。

相关问题