在 C++14 中使用通用 lambda 函数递归

Recursion with generic lambda functions in C++14

本文关键字:lambda 函数 递归 C++14      更新时间:2023-10-16

我遇到了这个问题,答案描述了如何使用通用 lambda 函数来替换std::function技术以及如何重新连接停止条件以启用返回类型推导的漂亮细节。

基于上述内容,我创建了以下工作示例:

#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吗?

auto&只是左值。

例如,在您重构左值递归对象并将其替换为临时代理记忆器之前,这无关紧要。

auto&&是无害的,意思是"我不介意这是临时的还是其他的,只是不要复制",这在这里很好地表达了意义。auto&说"不允许临时! 有时您想在进行引用时排除临时人员,但这种情况很少见。

auto const&autoauto&&应该是你的面包和黄油。

仅当您的操作明确涉及编写并且您可以排除代理引用时,才使用auto&