http://hi.baidu.com/zyb_debug/blog/item/cdfc2adf9b982451cdbf1a7e.html
streams定義了兩個可用于布爾表達式的函數
operator void*() 意義:stream是否出錯(相當于!fail())
operator !() 意義:stream是否已出錯(相當于fail())
我們可以運用operator void*()在控制結構中簡潔測出stream的當前狀態:
while (std::cin)
{
}
控制結構中的布爾條件值并不是非得直接轉換為bool不可,只要能夠轉換為某個整數型別或指針型別就夠了。
轉換為void* 常常是為了在同一表達式中讀入對象并測試是否成功:
if(std::cin>> x)
{
//reading x was successful
}
正如先前的討論,表達式
std::cin >> x
會返回cin,所以讀入x后,上述語句變為
if(std::cin)
{
}
此時的cin被用于條件判斷,所以cin會調用 operator void*,返回"stream是否發生錯誤"
以上技術的幾個典型應用就是以循環讀入對象并處理
while(std::cin >> obj)
{
std:: cout << obj << std::endl;
}
如果failbit或badbit被設立,該循環就立即中止---出現錯誤或者讀到(end-of-file).
我們可以利用operator!進行相反測試,它會返回"strean是否已發生錯誤",也就是說如果failbit 或badbit被設立就會返回true用法如下:
if(!std::cin)
{
//the stream is not OK
}
上述文字出于 <<c++標準程序庫-自修教程與參考手冊->>p600 侯捷-孟巖譯
花了幾天時間終于將這本書閱讀完了,里面的streambuf沒有理解,是我功底不夠的緣故吧...
開學了,人多了起來,繼續靜靜的學習