ifstream对象使用了哪种运算符重载将其求值为布尔值 我是C++新手。最近我遇到了以下代码 ifstream in("somefile"); if(in){ //read the file.... }

ifstream对象使用了哪种运算符重载将其求值为布尔值 我是C++新手。最近我遇到了以下代码 ifstream in("somefile"); if(in){ //read the file.... },c++,visual-c++,C++,Visual C++,我想知道在if条件下,哪个重载ifstream的操作符可能用于in对象自动计算为boolean。我试过了,但找不到线索。请帮帮我。提前谢谢事实上,这是一个好主意 如果流有效,则重写它以返回非零指针,否则返回NULL指针。它返回的指针没有意义,不应取消引用,它只在布尔上下文中进行计算。空指针转换运算符通常用于此目的。类似于 struct ifstream { typedef void * voidptr; operator voidptr() const; }; std::ifstrea

我想知道在if条件下,哪个重载ifstream的操作符可能用于in对象自动计算为boolean。我试过了,但找不到线索。请帮帮我。提前谢谢

事实上,这是一个好主意


如果流有效,则重写它以返回非零指针,否则返回
NULL
指针。它返回的指针没有意义,不应取消引用,它只在布尔上下文中进行计算。

空指针转换运算符通常用于此目的。类似于

struct ifstream {
  typedef void * voidptr;
  operator voidptr() const;
};

std::ifstream
从其基类
std::ios
std::basic_ios
)获取其到
bool
的转换,该基类声明了转换函数:

explicit operator bool() const;
它返回
!fail()


(在标准ISO/IEC 14882:2003的前一版本中,
std::basic_ios
有一个转换函数
operator void*()const
,但该版本的标准现在已被撤销。)

这里也有答案: