Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;14_C++_Recursion_Lambda_C++14_Auto - Fatal编程技术网

C++ C++;14

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);

我遇到了一个问题,其中详细描述了如何使用泛型lambda函数替换,以及如何重新布线停止条件以启用返回类型推断

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

#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
没有任何好处。