在讀《Accelerated c++》時,對" while(cin>>x) " 感到疑惑。 難道 cin 會變?yōu)镹ULL么?不然要死循環(huán)了。猜測 io 應該重載了 bool 函數(shù)。 特轉(zhuǎn)載這篇博文。
C++的運算符重載功能真的很強大,除了可以重載常規(guī)運算符(比如,+ - * / > < = etc. )也可以重載類型轉(zhuǎn)換運算符(比如, (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;
}
運行結(jié)果:
1
0
a is ok
注意看那兩個if語句, 結(jié)果中只出現(xiàn)“a is ok”,說明if語句條件表達式隱含地進行了類型轉(zhuǎn)換(轉(zhuǎn)換成bool型),這樣,我們就能理解,為什么可以寫這樣的語句:
int n;
if ( cin>>n )
{
......
}
可以推斷,io流類也重載了bool型轉(zhuǎn)換運算符。