在 C++14 中使用通用 lambda 函数递归
Recursion with generic lambda functions in C++14
我遇到了这个问题,答案描述了如何使用通用 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&
,auto
和auto&&
应该是你的面包和黄油。
仅当您的操作明确涉及编写并且您可以排除代理引用时,才使用auto&
。
相关文章:
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何建立使用模板函数的lambda函数的尾部返回类型
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 两组使用lambda函数的大括号
- 尝试将lambda函数放在队列中时出现一般分配器错误(可能是与unique_ptr有关的错误)
- 我可以在这里替换什么,因为我不能在 C# 中使用隐式变量的 lambda 函数?
- 为什么我不能在 constexpr lambda 函数中使用 std::tuple
- C++:Lambda 函数指针转换的用例是什么?
- 将 lambda 函数作为参数传递C++
- 如何将 lambda 函数作为参数发送到另一个函数
- 传递 lambda 函数的权衡是什么?
- 如何使用类模拟 C++11 中的 lambda 函数和闭包?
- 不是 lambda 函数中的常量表达式
- 如何使用可变参数数重载 lambda 函数?
- 如何通过指针传递lambda函数?
- 使用带有 lambda 函数指针的模板
- openmp c++ 中并行块内 lambda 函数的奇怪行为
- C++ 中 Lambda 函数中的溢出
- 将数组传递到 lambda 函数中
- lambda 函数未显示正确的结果