为什么Lambda返回布尔
Why lambda returns bool?
我已经开始学习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。现在,很明显,对于qDebug()
而言,operator<<
没有在Lambda的闭合类型上超载。因此,自然必须发生隐性转换顺序。唯一可用的,仅是因为您的lambda是捕获的,从转换为函数指针开始。
现在,可以使用哪种过载operator<<
来打印功能指针?从表面上看,两个可能的候选人:
operator<<(bool t) // Because it prints true, duh
operator<<(const void *p) // Because pointers :)
为什么bool
超载?因为功能指针不能隐式转换为void*
。该转换是有条件地支持的,必须使用铸件([Expr.Reinterpret.cast]/8)执行:
将功能指针转换为对象指针类型,反之亦然 是有条件支撑的。
只有[Cons.Bool]离开我们:
算术,未列出,指针或指针 会员类型可以转换为bool类型的prvalue。
您需要实际执行 lambda:
qDebug() << abc();
当前<<
过载是将lambda的类型转换为 bool
,然后输出。
相关文章:
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 如何在 c++ 中让布尔变量返回为 0 或 1 而不是真或假?
- 重载更少,则运算符返回相反的布尔值
- 为什么我不能在返回 const 的布尔函数中为类成员变量赋值?C++
- 程序中的布尔函数返回输入的范围无论如何都是无效的
- 存储另一个函数返回的布尔数组时遇到问题
- 如何创建两个具有相同名称和不同返回类型并基于布尔参数运行的函数
- 如何使用返回布尔值的函数?
- 函数的返回值类型是别名 ***或 *** 布尔值
- C++ 这里有一个返回 (24) 的布尔返回类型函数
- 如何将值初始化为返回类型为布尔值的函数?
- 返回布尔值在 cocos2dx 的 onTouchBegan() 中是什么意思?
- 它如何返回布尔结果?
- 我正在尝试创建一个布尔函数,该函数计算字符并在字符为"()*-+"时返回 true
- 在开关情况下返回布尔值
- 将返回表达式隐式转换为布尔值
- 让二传手返回布尔值是好习惯吗?
- 为什么C++ std::min_element 库函数接受采用布尔返回类型的函数对象的函子,而不是像 C 中那样的 in
- 创建一个函数,该函数根据边缘转换为给定(浮点)时间值计算布尔返回值
- 布尔返回 24