fstream / ifstream / ofstream 对象如何转换为 bool
How is fstream / ifstream / ofstream objects convert to bool
我想知道,这些对象是如何转换为bool的。我的意思是编译器在转换时依赖什么。在位标志上?我认为它是这样工作的:编译器检查标志,如果 !goodbit 则 returns false else 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;
P.S。我英语不好,抱歉
编译器使用 operator bool
将流转换为布尔值。在文档中,您可以阅读 std::basic_ios<CharT,Traits>::operator bool
Checks whether the stream has no errors.
1) Returns a null pointer if fail()
returns true
, otherwise returns a non-null pointer. This pointer is implicitly convertible to bool and may be used in boolean contexts.
2) Returns true
if the stream has no errors and is ready for I/O operations. Specifically, returns !fail().
同一页面上有一个非常有用的 table,详细说明了哪些位 (eofbit, failbit, badbit
) 导致 fail()
返回 true 或 false。
我想知道,这些对象是如何转换为bool的。我的意思是编译器在转换时依赖什么。在位标志上?我认为它是这样工作的:编译器检查标志,如果 !goodbit 则 returns false else 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;
P.S。我英语不好,抱歉
编译器使用 operator bool
将流转换为布尔值。在文档中,您可以阅读 std::basic_ios<CharT,Traits>::operator bool
Checks whether the stream has no errors.
1) Returns a null pointer if
fail()
returnstrue
, otherwise returns a non-null pointer. This pointer is implicitly convertible to bool and may be used in boolean contexts.2) Returns
true
if the stream has no errors and is ready for I/O operations. Specifically, returns !fail().
同一页面上有一个非常有用的 table,详细说明了哪些位 (eofbit, failbit, badbit
) 导致 fail()
返回 true 或 false。