5
4

2 回答 2

9

您似乎对函数的结果和函数本身感到困惑。在这条线上

auto result = [&val1, &val2](){return (val1 + val2);};

您正在创建一个 lambda 函数(在 的右侧=),并将其分配给一个名为result. 这里auto是保存 lambda 函数的变量的类型,而不是 lambda 函数的返回类型。

如果你想让返回类型明确,可以这样做:

auto result = [&val1, &val2]() -> int {return (val1 + val2);};

如果你想让类型result更明确,你可以使用std::function

std::function<int()> result = [&val1, &val2]() {return (val1 + val2);};

另外,由于result是一个函数,你可以这样使用result

std::cout << result() << "\n";
于 2013-06-04T13:01:59.830 回答
3

在您的示例中,result 是一个函数(请注意,您不执行匿名函数)。在行

std::cout << "Result: " << [&val1, &val2](){return (val1 + val2) ;} << '\n';

您正在尝试输出一个函数,而不是应用该函数的结果。将其更改为

std::cout << "Result: " << [&val1, &val2](){return (val1 + val2) ;}() << '\n';

它打印出 和 的val1总和val2

于 2013-06-04T13:03:01.543 回答