递归 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)
如果您不打算传递右值,那么差异没有实际意义。
当我需要实现一个递归的 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)
如果您不打算传递右值,那么差异没有实际意义。