lambda returns 始终为“1”
lambda returns '1' all time
有这样的代码
#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;
}
用gcc version 4.8.2
编译,我的输出只有1111111111
。
为什么只有“1”?
你说的:
cout<<[](){ return 0;};
您想说的:
cout<<[](){ return 0;}();
看到括号了吗?
如果你这样做会怎样:
#include <iostream>
using namespace std;
void foo()
{
}
int main()
{
cout<<foo;
return 0;
}
您不是在调用该方法,而是试图打印其地址。选择 cout
的重载 operator <<(bool)
,因此对于您尝试打印的任何有效函数,您都会得到 1
.
要实际调用函数(或 lambada),请添加 ()
。
当 lambda 表达式没有捕获时,它可以隐式转换为函数指针。
反过来,函数指针可以隐式转换为 bool
,如果指针不为 null,则生成 true
,这将被打印出来。
如果您 cout << std::boolalpha
在您的输出之前,you'll see truetruetrue....
printed instead。
如果您在 lambda 中捕获了一些东西,那么它就不能再转换为函数指针,并且 you'd get a compiler error.
如果你想打印通过调用 lambda 返回的结果,那么你需要 ()
,正如其他人指出的那样。
有这样的代码
#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;
}
用gcc version 4.8.2
编译,我的输出只有1111111111
。
为什么只有“1”?
你说的:
cout<<[](){ return 0;};
您想说的:
cout<<[](){ return 0;}();
看到括号了吗?
如果你这样做会怎样:
#include <iostream>
using namespace std;
void foo()
{
}
int main()
{
cout<<foo;
return 0;
}
您不是在调用该方法,而是试图打印其地址。选择 cout
的重载 operator <<(bool)
,因此对于您尝试打印的任何有效函数,您都会得到 1
.
要实际调用函数(或 lambada),请添加 ()
。
当 lambda 表达式没有捕获时,它可以隐式转换为函数指针。
反过来,函数指针可以隐式转换为 bool
,如果指针不为 null,则生成 true
,这将被打印出来。
如果您 cout << std::boolalpha
在您的输出之前,you'll see truetruetrue....
printed instead。
如果您在 lambda 中捕获了一些东西,那么它就不能再转换为函数指针,并且 you'd get a compiler error.
如果你想打印通过调用 lambda 返回的结果,那么你需要 ()
,正如其他人指出的那样。