gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 23:55:46 24 4
gpt4 key购买 nike

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.

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

最佳答案

std::function

operator bool()显式,因此不能用于复制初始化。您实际上可以进行直接初始化:

bool yes(f = the_answer);

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

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

关于c++ - 没有从 std::function 到 bool 的可行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30385900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com