为什么Lambda函数在C++;0x返回类型必须是自动的? 我是C++的新手。我只是尝试了一些小代码片段来理解使用GCC4.6.3编译的lambda函数,其中包含-std=c++0x。我知道它对C++0x不是最好的,但它支持lambda表达式。 我写过这样的话: int main(){ int val1 = 0, val2 = 0; std::cout << "Enter Value1" << '\n'; std::cin >> val1; std::cout << "Enter Value2" << '\n'; std::cin >> val2; auto result = [&val1, &val2](){return (val1 + val2);}; std::cout << "Result: " << [](int x, int y){return(x + y);}(32, 46) << '\n'; //std::cout << "Result: " << [&val1, &val2](){return (val1 + val2) ;} << '\n'; return 0; } intmain(){ int val1=0,val2=0; 标准:cout-val1; 标准:cout-val2; 自动结果=[&val1,&val2](){return(val1+val2);}; std::cout

为什么Lambda函数在C++;0x返回类型必须是自动的? 我是C++的新手。我只是尝试了一些小代码片段来理解使用GCC4.6.3编译的lambda函数,其中包含-std=c++0x。我知道它对C++0x不是最好的,但它支持lambda表达式。 我写过这样的话: int main(){ int val1 = 0, val2 = 0; std::cout << "Enter Value1" << '\n'; std::cin >> val1; std::cout << "Enter Value2" << '\n'; std::cin >> val2; auto result = [&val1, &val2](){return (val1 + val2);}; std::cout << "Result: " << [](int x, int y){return(x + y);}(32, 46) << '\n'; //std::cout << "Result: " << [&val1, &val2](){return (val1 + val2) ;} << '\n'; return 0; } intmain(){ int val1=0,val2=0; 标准:cout-val1; 标准:cout-val2; 自动结果=[&val1,&val2](){return(val1+val2);}; std::cout,c++,c++11,auto,lambda,C++,C++11,Auto,Lambda,您似乎混淆了函数的结果和函数本身 auto result = [&val1, &val2](){return (val1 + val2);}; 您正在创建一个lambda函数(在=的右侧),并将其分配给名为result的变量。auto用于保存lambda函数的变量类型,而不是lambda函数的返回类型 如果要使返回类型显式,可以这样做: auto result = [&val1, &val2]() -> int {return (val1 + val2);

您似乎混淆了函数的结果和函数本身

auto result = [&val1, &val2](){return (val1 + val2);};
您正在创建一个lambda函数(在
=
的右侧),并将其分配给名为
result
的变量。
auto
用于保存lambda函数的变量类型,而不是lambda函数的返回类型

如果要使返回类型显式,可以这样做:

auto result = [&val1, &val2]() -> int {return (val1 + val2);};
std::cout << result() << "\n";
如果要使
结果的类型更明确,可以使用
std::function

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

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

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

std::cout它不是一个函数指针,它是lambda表达式创建的闭包类型的实例。哦,好吧,我刚刚返回了定义,但是为了调用这个匿名函数,我需要输入括号。谢谢..:)我怀疑这个lambda表达式类似于Python中的单行函数,所以不会产生结果t应该是一个返回变量&auto应该说like return type是some(void*)?这就像调用result=func(int x,int y);其中func定义是int func(int,int)?还有std::function是一个包装器,它会使事情变得复杂,你不这么认为吗?投票支持增加我关于lambda表达式的信息。@AshankPanwar:lambda就像无名函数,但你似乎对函数的结果和函数本身感到困惑。我明白了,但我的困惑更多的是为什么我不能只定义
int-result
而不是
auto-result
?因为我知道返回类型将是
int
,即使编译器会进行隐式转换。但我认为这更多是基于我对
auto
关键字本身的理解。@AshankPanwar:我在回答中添加了一些细节,可能会使它更简单矿石清澈。
std::cout << "Result: " << [&val1, &val2](){return (val1 + val2) ;}() << '\n';