gpt4 book ai didi

c++ - 为什么 Boost 库会返回 "convertible to ` bool `"rather than just returning ` bool`s?

转载 作者:可可西里 更新时间:2023-11-01 18:40:42 30 4
gpt4 key购买 nike

有好几次,在仔细阅读 Boost 库的文档时,我遇到了标记为“convertible to bool”的返回值(在该页面上搜索短语“convertible to bool”,它大约下降了三分之一) .我曾经偶然发现对一篇解释其原因的论文的间接引用,但一直找不到该论文(而且我再也找不到我在其中看到引用的页面)。

谁能解释为什么(以及何时)您应该返回“可转换为 bool”的内容,而不是简单地返回 bool

最佳答案

“convertible to bool”只是指任何可以在 bool 上下文中有意义地使用的东西(例如,在 if 条件中)。这在隐式转换中是有意义的。想象一个你想在 bool 上下文中使用的对象,例如std::fstream:

ifstream ifs("filename");
while (ifs >> token)
cout "token " << token << " read." << endl;

此处,ifs 可转换为 bool 值。好吧,实际上,它不是。相反,它可以转换为某种东西,而后者又可以转换为 bool。这是为了防止这样的陈述:

int b = ifs;

推理是这样的语句很可能不是有意的,因此编译器应该阻止它。通过返回“可转换为 bool”而不是 bool,这是因为不能在一个表达式中链接两个用户定义的隐式转换。

在这种情况下,您可能需要查找 safe bool idiom . Chris 已经提到了一种可能的实现方式,使用 void* 作为返回类型。通常,this 指针然后用于表示 true。这就是 STL 使用的内容。然而,不幸的是,这仍然是有缺陷的。已经提出了几种替代方案(在我上面链接的文章中巧妙地总结了),据我所知,它们也已包含在 C++0x 中以供考虑。不过,我不知道这些提案的当前状态。

关于c++ - 为什么 Boost 库会返回 "convertible to ` bool `"rather than just returning ` bool`s?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/263227/

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