我有一个非常简单的递归 lambda,它计算给定 2 个数字的总和:
auto sum_v1 = [](auto first){
return [first](auto second){
return first + second;
};
};
sum_v1 (1)(2); // returns 3, OK
现在同样的功能,首先使用 arg 的引用捕获。
auto sum_v2 = [](auto first){
return [&first](auto second){
return first + second;
};
};
sum_v2 (1)(2); // returns 4, NOT OK
sum_v2
得到参数first
as2
并且 argsecond
也是2
.
我知道如何得到正确的结果。我可以使用 sum_v1 或 sum_v3(如下所示)。
// accept arg first using r-value reference
auto sum_v3 = [](auto&& first){
return [first](auto second){
return first + second;
};
};
sum_v3 (1)(2); // returns 3, OK
How issum_v2
在创建 lambda 时,将 argfirst
视为 2。我很难理解这一点。
您能否给我一些提示以更好地理解这一点?我在 rhel 7 上使用带有 -std=c++17 的 gcc.9.2.0。
谢谢,高拉夫