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