【发布时间】:2020-06-05 02:40:55
【问题描述】:
我想知道,这些对象如何转换为布尔值。我的意思是编译器在转换时所依赖的内容。在位标志上?我认为它是这样工作的:编译器检查标志,如果!goodbit 然后返回 false,否则返回 true。 例如:
#include <iostream>
#include <fstream>
int main() {
std::ifstream file("someDir.txt");
if(!file) { \\ Checks the flags? If !goodbit (eofbit, badbit or failbit) return false else true?
\\some code
}
return 0;
附:我英语不好,对不起
【问题讨论】:
-
你的答案是here
-
正如@Asteroids 指出的那样,您不必猜测,只需在文档中查找即可(顺便说一句,为什么这不是您做的第一件事?)。
-
对于 OPs 防御,如果你不知道该找什么很容易错过,在 c++11 之前甚至没有直接转换为
bool。 -
@idclev C++11 现在已经 9 岁多了。没有人应该使用较旧的东西 - 大多数人应该使用明显更新的东西。
-
@JesperJuhl 我的意思是
c++的新手可能不知道他们需要寻找operator bool(我完全同意“应该”但不幸的是“裁判”表明C++98默认仍然存在)