在读《Accelerated c++》时,对" while(cin>>x) " 感到疑惑。 难道 cin 会变为NULL么?不然要死循环了。猜测 io 应该重载了 bool 函数。 特转载这篇博文。
C++的运算符重载功能真的很强大,除了可以重载常规运算符(比如,+ - * / > < = etc. )也可以重载类型转换运算符(比如, (int) (bool) (char *) etc. ),请看下面的例子,类Student重载了运算符 (bool) .
#include <iostream>
using namespace std;
class Student
{
public:
Student(bool _isok = true) : isok(_isok){}
operator bool()
{
return isok;
}
bool isok;
~Student(){}
};
int main(int argc, char *argv[])
{
Student a(true), b(false);
cout<<((bool)a)<<endl;
cout<<((bool)b)<<endl;
if( a )
cout<<"a is ok"<<endl;
if( b )
cout<<"b is ok"<<endl;
return 0;
}
运行结果:
1
0
a is ok
注意看那两个if语句, 结果中只出现“a is ok”,说明if语句条件表达式隐含地进行了类型转换(转换成bool型),这样,我们就能理解,为什么可以写这样的语句:
int n;
if ( cin>>n )
{
......
}
可以推断,io流类也重载了bool型转换运算符。