【发布时间】:2011-09-25 05:45:33
【问题描述】:
我是 C++ 新手。最近我遇到以下代码
ifstream in("somefile");
if(in){
//read the file....
}
我想知道哪个运算符重载 ifstream 可能已用于 in 对象在 if 条件下自动评估为布尔值。我试过但找不到线索。请帮我。提前感谢
【问题讨论】:
标签: c++ visual-c++
我是 C++ 新手。最近我遇到以下代码
ifstream in("somefile");
if(in){
//read the file....
}
我想知道哪个运算符重载 ifstream 可能已用于 in 对象在 if 条件下自动评估为布尔值。我试过但找不到线索。请帮我。提前感谢
【问题讨论】:
标签: c++ visual-c++
其实是operator void *。
如果流有效则返回非零指针,否则返回NULL 指针。它返回的指针是无意义的,不应该被取消引用,它只能在布尔上下文中进行评估。
【讨论】:
void 指针转换运算符经常用于此目的。类似于
struct ifstream {
typedef void * voidptr;
operator voidptr() const;
};
【讨论】:
std::ifstream 从它的基类 std::ios (std::basic_ios<char>) 中转换为 bool,该基类声明了转换函数:
explicit operator bool() const;
它返回!fail()。
(在之前版本的标准 ISO/IEC 14882:2003 中,std::basic_ios 有一个转换函数operator void*() const,但是这个版本的标准现在已经被撤销了。)
【讨论】: