c++ - 递归 lambda : pass by reference or universal reference?

标签 c++ lambda pass-by-reference

当我需要实现递归 lambda 时,通常我这样做:

auto factorial = [](auto& self, int n) -> int {
    return n == 0 ? 1 : n * self(self, n - 1);
};
并用 factorial(factorial, n) 调用它.但是,我看到有人声明参数 self带类型 auto&&而不是 auto& .有什么不同?

最佳答案

What's the difference?


对示例的非常量的左值引用不能绑定(bind)到右值。

and call it with factorial(factorial, n)


如果您不打算传递右值,则差异没有实际意义。

关于c++ - 递归 lambda : pass by reference or universal reference?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67651303/

相关文章:

c++ - 这种计算数组长度的方法是如何工作的?

c++ - SWIG Python 和 C++ std::string 空终止问题

c++ - 按值|引用调用的另一个问题

c# - += 运算符与 lambda 运算符的用法

c++ - 数据成员 int 引用

c++ - 按值传递变量与按引用传递变量具有相同的结果

c++ - CMake add_subdirectory 不调用子 CMakeLists.txt

c++ - g++ 错误 : ‘stricmp’ was not declared in this scope (but OK for 'strcmp' )

c++ - 将不可复制的闭包对象传递给 std::function 参数

c# - 我们如何在 C# 中解释 => Something => Something2 => Something3