递归 lambda:通过引用还是通用引用传递?

Recursive lambda: pass by reference or universal reference?

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

auto factorial = [](auto& self, int n) -> int {
    return n == 0 ? 1 : n * self(self, n - 1);
};

并用factorial(factorial, n)调用它。但是,我看到有人声明参数 self 类型为 auto&& 而不是 auto&。有什么区别?

正如@appleapple所说,

no real difference in your case

没错。如果您想了解更多,也许您会感兴趣:C++ auto& vs auto

What's the difference?

您的示例中对非常量的左值引用无法绑定到右值。

and call it with factorial(factorial, n)

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