其他分享
首页 > 其他分享> > c – 没有可行的从std :: function到bool的转换

c – 没有可行的从std :: function到bool的转换

作者:互联网

C 11 std :: function应该实现operator bool() const,那为什么clang告诉我没有可行的转换?

#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 %.2f\n",f());
}

编译错误是:

function_bool.cpp:12:7: error: no viable conversion from 'std::function<double ()>' to 'bool'
        bool yes = (f = the_answer);
             ^     ~~~~~~~~~~~~~~~~
1 error generated.

编辑我没有看到显式关键字..然后没有隐式转换,我想我将不得不使用static_cast.

解决方法:

std :: function的operator bool()是显式的,因此它不能用于复制初始化.你可以实际进行直接初始化:

bool yes(f = the_answer);

但是,我认为它确实用于上下文转换,这种情况发生在表达式用作条件时,通常用于if语句.与隐式转换不同,上下文转换可以调用显式构造函数和转换函数.

// this is fine (although compiler might warn)
if (f = the_answer) {
    // ...
}

标签:c,c11,operator-overloading,implicit-conversion
来源: https://codeday.me/bug/20191009/1877381.html