【问题标题】:which operator overloading has been used for ifstream object to evalute to boolean哪个运算符重载已用于 ifstream 对象以评估为布尔值
【发布时间】:2011-09-25 05:45:33
【问题描述】:

我是 C++ 新手。最近我遇到以下代码

ifstream in("somefile");

if(in){
    //read the file....
}

我想知道哪个运算符重载 ifstream 可能已用于 in 对象在 if 条件下自动评估为布尔值。我试过但找不到线索。请帮我。提前感谢

【问题讨论】:

标签: c++ visual-c++


【解决方案1】:

其实是operator void *

如果流有效则返回非零指针,否则返回NULL 指针。它返回的指针是无意义的,不应该被取消引用,它只能在布尔上下文中进行评估。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      std::ifstream 从它的基类 std::ios (std::basic_ios<char>) 中转换为 bool,该基类声明了转换函数:

      explicit operator bool() const;
      

      它返回!fail()

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

      【讨论】:

        猜你喜欢
        • 2017-05-24
        • 1970-01-01
        • 2011-07-31
        • 1970-01-01
        • 1970-01-01
        • 2010-09-23
        • 1970-01-01
        • 2013-11-11
        • 1970-01-01
        相关资源
        最近更新 更多