Ste*_*nov 5 c++ lambda gcc return g++
有这样的代码
#include <iostream>
using namespace std;
int main()
{
cout<<[](){ return 0;};
cout<<[](){ return 3.2;};
cout<<[](){ return true;};
cout<<[](){ return false;};
cout<<[](){ return "Hello world!";};
cout<<[]()->int{ return 0;};
cout<<[]()->double{ return 3.2;};
cout<<[]()->bool{ return true;};
cout<<[]()->bool{ return false;};
cout<<[]()->const char*{ return "Hello world!";};
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译它,gcc version 4.8.2我的输出只1111111111.为什么只有"1"?
当lambda表达式没有捕获时,它可以隐式转换为函数指针.
反过来,函数指针可以隐式转换为bool,true如果指针不为null,则会产生打印.
如果你cout << std::boolalpha在输出之前,你会看到truetruetrue....打印.
如果你在lambda中捕获了某些内容,那么它就不再可以转换为函数指针,并且你会遇到编译器错误.
如果你想打印通过调用lambda返回的结果,那么你需要(),正如其他人所指出的那样.
小智 5
你说的话:
cout<<[](){ return 0;};
Run Code Online (Sandbox Code Playgroud)
你想说什么:
cout<<[](){ return 0;}();
Run Code Online (Sandbox Code Playgroud)
看支架?
如果你这样做会怎么样
#include <iostream>
using namespace std;
void foo()
{
}
int main()
{
cout<<foo;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您没有调用该方法,而是尝试打印其地址.过载operator <<(bool)的cout选择,从而为您尝试打印任何有效的功能,你会得到一个1.
实际上,调用函数(或lambadas),添加().
| 归档时间: |
|
| 查看次数: |
185 次 |
| 最近记录: |