c++ - C++ 没有从 std::function 到布尔值的可行转换

  显示原文与译文双语对照的内容
130 2

C++11 std::function 应该实现 operator bool() const is,因这里为什么它会告诉我没有可以行的转换。


#include <functional>


#include <cstdio>



inline double the_answer() 


 { return 42.0; }



int main()


{


 std::function<double()> f;



 bool yes = (f = the_answer);



 if (yes) printf("The answer is %.2fn",f());


}



编译错误为:


function_bool.cpp:12:7: error: no viable conversion from 'std::function<double ()>' to 'bool'


 bool yes = (f = the_answer);


 ^ ~~~~~~~~~~~~~~~~


1 error generated.



编辑 。我没有看到 explicit 关键字。 没有隐式转换,我想我将不得不使用 static_cast

时间: 原作者:

87 3

operator bool()std::functionexplicit,因这里无法用于复制初始化。 实际上,你可以直接初始化:


bool yes(f = the_answer);



但是,我假设它真正适用于上下文相关上下文转换,当表达式作为条件使用时,最常出现在 if 语句。 上下文转换可以调用 explicit 构造函数和转换函数,与隐式转换不同。


//this is fine (although compiler might warn)


if (f = the_answer) {


//...


}



原作者:
...