我有一个如下的 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以获取打印结果true或false类似cout << boolalpha<< lambda << endl;)。
如果要打印出 lambda 的返回值,应该是
cout << lambda(42) << endl;
Run Code Online (Sandbox Code Playgroud)
但请注意,在main没有return 语句的情况下从值返回函数(except )的末尾流出是未定义的行为,对于 lambdas 也是如此。
顺便说一句:只有没有捕获的 lambda 才能隐式转换为函数指针,而有捕获的 lambda 则不能。
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |