我是C++的新手.我只是尝试了几个小代码片段来理解使用GCC 4.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;
}
Run Code Online (Sandbox Code Playgroud)
我的第一个问题是,为什么我一定要定义result
为auto
当我已经知道了预期(隐含的)结果会是int
?在注释的代码行中我收到一个错误error: cannot bind ‘std::basic_ostream<char>’ lvalue to ‘std::basic_ostream<char>&&’
.你能告诉我为什么会这样吗?提前致谢.
你似乎对函数的结果和函数本身感到困惑.在这条线上
auto result = [&val1, &val2](){return (val1 + val2);};
Run Code Online (Sandbox Code Playgroud)
您正在创建一个lambda函数(在右侧=
),并将其分配给一个名为的变量result
.在auto
没有为变量保存lambda函数,而不是lambda函数的返回类型的类型.
如果你想使返回类型是显式的,它将这样做:
auto result = [&val1, &val2]() -> int {return (val1 + val2);};
Run Code Online (Sandbox Code Playgroud)
如果您想使类型result
更明确,您可以使用std::function
:
std::function<int()> result = [&val1, &val2]() {return (val1 + val2);};
Run Code Online (Sandbox Code Playgroud)
此外,既然result
是一个函数,你会这样使用result
:
std::cout << result() << "\n";
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1371 次 |
最近记录: |