为什么这个 C++ lambda 函数返回 1?

Cai*_*hou 1 c++ lambda c++11

我有一个如下的 lambda 函数,它显式声明int为它的返回类型,但在它的实现中,它什么都不做。此外,它打印出它的返回值。令我惊讶的是,它编译没有错误并返回 1。谁知道原因?

auto lambda = [](int a) -> int{};
cout << lambda << endl;
Run Code Online (Sandbox Code Playgroud)

son*_*yao 11

我打印出它的返回值

不,您正在打印 lambda 本身。对于这种情况,它转换为函数指针,然后bool隐式转换为。对于非空指针,转换后的结果是true(即1在这种情况下。您可以使用std::boolalpha以获取打印结果truefalse类似cout << boolalpha<< lambda << endl;)。

如果要打印出 lambda 的返回值,应该是

cout << lambda(42) << endl;
Run Code Online (Sandbox Code Playgroud)

但请注意,在main没有return 语句的情况下从值返回函数(except )的末尾流出是未定义的行为,对于 lambdas 也是如此。


顺便说一句:只有没有捕获的 lambda 才能隐式转换为函数指针,而有捕获的 lambda 则不能。