为什么std :: function在C 11中没有隐式转换为bool?

为什么std :: function在C 11中没有隐式转换为bool?,第1张

概述参见英文答案 > No viable conversion from std::function to bool                                    1个 请考虑以下代码. #include <functional>int main(void){ std::function<void()> f1; if (f1) { /* ok */ 参见英文答案 > No viable conversion from std::function to bool                                    1个
请考虑以下代码.

#include <functional>int main(voID){    std::function<voID()> f1;    if (f1) { /* ok */        ...    }    bool b = f1; /* compile-error */    bool B = !f1; /* ok */    ...}

的std ::功能<>在某些情况下隐式转换为bool但不是全部转换为bool.将它分配给bool变量不起作用,而 *** 作的结果或在if() – 语句中使用它是正常的.

为什么会这样?看来我们必须对它进行布尔运算,然后转换才有效.

我做的工作b = f1-line是好的’双重爆炸:!!它看起来像现代C代码中的古董.

编辑:这也编译:

bool b = f1 || f1; /* OK */
解决方法 注意 std::function::operator bool是显式转换函数,不允许隐式转换.所以bool b = f1;不行. (如果您使用 static_cast,如bool b = static_cast< bool>(f1);则显式转换将很有效.)

using it in an if()-statement is OK.

与if一起使用时,运算符!或运算符||,contextual conversions将生效,并将考虑显式转换函数.

(自C 11起)

In the following five contexts,the type bool is expected and the implicit conversion sequence is built if the declaration bool t(e); is well-formed. that is,the explicit user-defined conversion function such as explicit T::operator bool() const; is consIDered. Such Expression e is saID to be contextually convertible to bool.

controlling Expression of if,while,for; the logical operators !,&& and ||; the conditional operator ?:; static_assert; noexcept.
总结

以上是内存溢出为你收集整理的为什么std :: function在C 11中没有隐式转换为bool?全部内容,希望文章能够帮你解决为什么std :: function在C 11中没有隐式转换为bool?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1217400.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存