为什么std :: function在C 11中没有隐式转换为bool?
参见英文答案 >
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);则显式转换将很有效.)
与if一起使用时,运算符!或运算符||,contextual conversions将生效,并将考虑显式转换函数. (自C 11起)
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |