C++ C++;14
我遇到了一个问题,其中详细描述了如何使用泛型lambda函数替换,以及如何重新布线停止条件以启用返回类型推断 基于上述内容,我创建了以下工作示例:C++ C++;14,c++,recursion,lambda,c++14,auto,C++,Recursion,Lambda,C++14,Auto,我遇到了一个问题,其中详细描述了如何使用泛型lambda函数替换,以及如何重新布线停止条件以启用返回类型推断 基于上述内容,我创建了以下工作示例: #include <cstdio> void printSeq(unsigned start) { auto recursion = [](auto&& self, const char* format, unsigned current) { printf(format, current);
#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);
}
#包括
void printSeq(未签名的开始){
自动递归=[](自动和自动,常量字符*格式,无符号当前){
printf(当前格式);
如果(!当前)
返回静态_cast(printf(“\n”);
其他的
self(self,,%u),当前为-1;
};
递归(递归,“%u”,开始);
}
int main(){
返回(printSeq(15),0);
}
我的问题是,在这种情况下,使用
auto&&
比auto&
有什么优势?我应该在这里使用std::move
吗?auto&
仅为左值
例如,在重构并用临时代理记忆器替换左值递归对象之前,这无关紧要
auto&&
是无害的,意思是“我不介意这是临时工或其他什么,只是不要复制”,这在这里表达得很好auto&
声明“不允许临时引用!”有时您希望在引用时排除临时引用,但很少
auto-const&
,auto
和auto&
应该是你的谋生之道
如果您的操作明确是关于写入的,并且您可以排除代理引用,则只使用
auto&
。需要注意的一点是,由于recursion
不捕获任何内容,因此它只是一个微不足道的对象,因此使用std::move
没有任何好处。