【问题标题】:What overloaded operator is called in an if condition?在 if 条件下调用什么重载运算符?
【发布时间】:2015-05-23 20:45:05
【问题描述】:

从例子http://www.cplusplus.com/reference/istream/istream/read/有以下语句

ifstream is;
...
...

if (is) { // What overloaded operater of **is** object is called here
....
}

is对象的重载运算符叫什么?

【问题讨论】:

  • @volerag:只有当你已经知道问题的答案——“调用什么重载运算符”——“operator bool()”。因此,链接是相关的,但问题不是重复的。
  • 嗯,@DevSolar 我想我回答了他的问题以及称它为重复。这没什么不对吧?

标签: c++ if-statement


【解决方案1】:

std::basic_iosbool conversion operator

这在功能上等同于:

if ( ! is.fail() )

【讨论】:

    【解决方案2】:

    从C++11开始,有一个转换为bool的运算符:

    explicit operator bool() const;
    

    在此之前,有一个转换运算符到void*

    operator void*() const;
    

    对于任何非空指针,后者的计算结果为true,否则为false

    【讨论】:

    • 值得注意的是,如果您正在编写无法使用operator bool() 的代码,您应该阅读安全布尔成语。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 2011-01-21
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多