cin和cout返回值問題
cin和cout返回值問題
---雨竹清風
今天看了段程式碼感覺怪怪的。
string value;
while(cin>>value)
{
cout<<value<<endl;
}
哪不對吶?while迴圈條件,while迴圈判斷條件還能是非bool,非常量型的?
從網上查了一下,下面是引用網上大牛的原話。
分下面幾點來說明:
1.cin和cout是iostream類的2個物件,而物件是無所謂返回值的.有返回值的是<<還有>>這2個操作符.由於我們知道,操作符其實也就是函式(在操作符過載的時候可以清晰的認識到).
2.但是好像還是不對,因為while裡面判斷的是bool值,難道還能判斷istream&嗎?
開啟<ISTREAM>標頭檔案,找到類模板basic_istream的定義,摘出這麼兩個語來:
typedef basic_istream<_E, _Tr> _Myt;
_Myt& operator>>(......) ......
這說明cin >>的返回值型別就是basic_istream&
開啟標頭檔案<IOS.H>,找到ios的定義,其中有這麼一條語句,型別轉換函式的定義:
operator void *() const { if(state&(badbit|failbit) ) return 0; return (void this; }
有這個函式的定義之後,編譯器會在需要的情況下將ios