首页 > 解决方案 > 为什么这个 C++ lambda 函数返回 1?

问题描述

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

auto lambda = [](int a) -> int{};
cout << lambda << endl;

标签: c++c++11lambda

解决方案


我打印出它的返回值

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

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

cout << lambda(42) << endl;

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


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


推荐阅读