lambda一直返回'1'

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"?

T.C*_*.C. 7

当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)

看支架?


Luc*_*ore 5

如果你这样做会怎么样

#include <iostream>
using namespace std;
void foo()
{
}
int main() 
{ 
  cout<<foo;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

您没有调用该方法,而是尝试打印其地址.过载operator <<(bool)cout选择,从而为您尝试打印任何有效的功能,你会得到一个1.

实际上,调用函数(或lambadas),添加().