c++ - 是否可以将任何类对象作为任何测试表达式的测试表达式传递,例如 if,while like ifstream 对象。

标签 c++

在 C++ 中,我可以将我的对象用作测试表达式,如 ifstream 对象吗?如果不是,为什么?

例如

ifstream ifs ("myfile.txt");
while( ifs ){
   //read and process data..
}

我有一个类,我需要重载哪个运算符才能让编译器允许我的对象作为测试表达式传递?

例如

MyClass obj1;
if( obj1 ){
   //do something..
}

while( obj1 ){
   //do something repeatedly..
}

两者都应该是有效的表达式。

最佳答案

您必须在您的类中实现一个bool 重载。像这样:

class myClass {
    public:
        explicit operator bool() const { return condition; }
};

它在 ifwhile 语句中都有效。但是,如果您的编译器不支持 C++11,则您不能在此重载中使用 explicit 关键字。

关于c++ - 是否可以将任何类对象作为任何测试表达式的测试表达式传递,例如 if,while like ifstream 对象。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14960742/

相关文章:

c++ - 来自非 qt 线程的信号 qt,QueuedConnection

c++ - 为什么在向类内的数据 vector 插入元素时出现段错误?

c++ - 如何摆脱不安全的功能(sprintf,...)

C++ 11 - condition_variable - wait_until 未按预期工作

c++ - 在目录树中查找文件的最快方法是什么

c++ - 如何在同一台计算机上同时安装多个版本的 llvm libc++(ubuntu)?

c++ - 错误 C4716 : must return a value, 由实际返回值的函数抛出

C++ Linux 与另一个程序交互 stdin/stdout

c++ - 文件夹结构 - 良好做法

c++ - 我们如何将此一维 vector 作为二维 vector 访问