gpt4 book ai didi

c++ - 为什么 lambda 返回 bool 值?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:25:39 25 4
gpt4 key购买 nike

我已经开始学习 C++11 和 C++14,但我有一个问题。为什么 lambda 不返回 23?

template<class T>
auto func(T t)
{
return t;
}

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

auto abc = []()->auto { return func(23); };
qDebug() << abc; // output: true

return a.exec();
}

最佳答案

正如@Bathsheba 指出的那样。你打错了,不要调用 lambda。现在,很明显 operator<<对于 qDebug()在 lambda 的闭包类型上没有重载。所以很自然地必须发生隐式转换序列。唯一可用的,并且只是因为您的 lambda 是无捕获的,从转换为函数指针开始。

现在,which overload of operator<< 可以用来打印函数指针吗?从表面上看,有两个可能的候选人:

operator<<(bool t)         // Because it prints true, duh
operator<<(const void *p) // Because pointers :)

那么为什么 bool重载?因为函数指针不能隐式转换为 void* .有条件地支持该转换,并且必须使用强制转换 ([expr.reinterpret.cast]/8) 执行:

Converting a function pointer to an object pointer type or vice versa is conditionally-supported.

剩下的只有 [conv.bool] :

A prvalue of arithmetic, unscoped enumeration, pointer, or pointer to member type can be converted to a prvalue of type bool.

关于c++ - 为什么 lambda 返回 bool 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47788245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com