我遇到了this问题,其中answer描述了有关如何使用通用lambda函数替换std::function
technique以及如何重新连接停止条件以启用退货类型扣除。
基于以上所述,我创建了以下工作示例:
#include <cstdio>
void printSeq(unsigned start) {
auto recursion = [](auto&& self, const char* format, unsigned current) {
printf(format, current);
if(!current)
return static_cast<void>(printf("\n"));
else
self(self, ", %u", current - 1);
};
recursion(recursion, "%u", start);
}
int main() {
return (printSeq(15), 0);
}
我的问题是,在这种情况下使用auto&&
优于auto&
的优势是什么?我应该在这里使用std::move
吗?
答案 0 :(得分:3)
auto&
只是左值。
这很重要,直到您使用临时代理备忘录重构和替换左值递归对象,例如。
auto&&
是无害的,意思是“我不介意这是一个临时或其他什么,只是不要复制”,这在这里表达了意义。 auto&
声明“不允许临时!”有时你想在制作参考时排除临时,但很少见。
auto const&
,auto
和auto&&
应该是你的面包和黄油。
如果您的操作明确是关于编写和,那么只使用auto&
您可以排除代理参考。