c++ - 为什么这个 C++ lambda 函数返回 1?
问题描述
我有一个如下的 lambda 函数,它显式地声明int
为它的返回类型,但在它的实现中,它什么也不做。此外,它打印出它的返回值。令我惊讶的是,它编译没有错误并返回 1。谁知道原因?
auto lambda = [](int a) -> int{};
cout << lambda << endl;
解决方案
我打印出它的返回值
不,您正在打印出 lambda 本身。对于这种情况,它转换为函数指针,然后bool
隐式转换为。对于非空指针,转换后的结果是true
(即1
在这种情况下。您可以使用或类似std::boolalpha
的方式获取打印结果)。true
false
cout << boolalpha<< lambda << endl;
如果要打印出 lambda 的返回值,应该是
cout << lambda(42) << endl;
但请注意,在没有return 语句main
的情况下从值返回函数(except )的末尾流出是未定义的行为,这对于 lambdas 也是如此。
顺便说一句:只有没有捕获的 lambda 可以隐式转换为函数指针,而有捕获的 lambda 不能。
推荐阅读
- python - 如何正确将此代码转换为 while 循环一?
- javascript - 在javascript中的变量上添加数字格式
- truclient - Truclient 对象识别
- python - 有没有办法在 Pytorch 中监控优化器的步骤?
- reactjs - 如何在 React 中从页面路由到另一个页面?
- python - 使用 tensorflow keras 后端将标量乘以张量
- javascript - node js,从 csv 文件中读取特定列并将其转换为要在其他函数中使用的数组
- typescript - 在 TypeScript 中使用可选泛型类型时如何避免不必要的参数?
- linux - AWK 脚本输入
- android - 为什么这是一个失败的断言?