最近,我一直在与函数推导作斗争,当然lambdas在这里被证明更灵活,但这样做我遇到了一个问题,为什么我应该使用函数而不是命名的lambdas?
例如,在
namespace
{
auto foo(auto && arg1, auto && arg2){
return arg1 + arg2;
}
auto bar = [](auto&& arg1, auto && arg2){
return arg1 + arg2;
}
}
字符串bar
在做模板和其他东西时更灵活,但是使用bar
有什么缺点吗?在真实的编程中的性能或内存成本?我用汇编输出运行了一些测试,在某些情况下,bar的指令甚至更少。
1条答案
按热度按时间xmjla07d1#
函数支持重载,并支持从实现中分离声明。
此外,函数参与了一种称为“参数相关解析”的东西。搜索类的命名空间中的函数时,不会在调用它们的行上显式命名空间。
字符串
如果你有
型
则将找到
some_ns::some_function
,而在呼叫线路上没有提到some_ns
。您可以使用继承技巧让lambda表达式参与重载解析,但即使这样,它也是一组封闭的重载。