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