• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            http://hi.baidu.com/zyb_debug/blog/item/cdfc2adf9b982451cdbf1a7e.html
            streams定義了兩個可用于布爾表達式的函數

            operator void*()   意義:stream是否出錯(相當于!fail())
            operator !()       意義:stream是否已出錯(相當于fail())

            我們可以運用operator void*()在控制結構中簡潔測出stream的當前狀態(tài):

            while (std::cin)
            {
            }
            控制結構中的布爾條件值并不是非得直接轉換為bool不可,只要能夠轉換為某個整數型別或指針型別就夠了。
            轉換為void* 常常是為了在同一表達式中讀入對象并測試是否成功:

            if(std::cin>> x)
            {
            //reading x was successful
            }
            正如先前的討論,表達式
            std::cin >> x
            會返回cin,所以讀入x后,上述語句變?yōu)?br>if(std::cin)
            {
            }

            此時的cin被用于條件判斷,所以cin會調用 operator void*,返回"stream是否發(fā)生錯誤"

            以上技術的幾個典型應用就是以循環(huán)讀入對象并處理
            while(std::cin >> obj)
            {
            std:: cout << obj << std::endl;
            }

            如果failbit或badbit被設立,該循環(huán)就立即中止---出現錯誤或者讀到(end-of-file).

            我們可以利用operator!進行相反測試,它會返回"strean是否已發(fā)生錯誤",也就是說如果failbit 或badbit被設立就會返回true用法如下:
            if(!std::cin)
            {
            //the stream is not OK
            }

            上述文字出于 <<c++標準程序庫-自修教程與參考手冊->>p600 侯捷-孟巖譯

            花了幾天時間終于將這本書閱讀完了,里面的streambuf沒有理解,是我功底不夠的緣故吧...
            開學了,人多了起來,繼續(xù)靜靜的學習

            Posted on 2009-09-06 14:38 zyb_debug 閱讀(2106) 評論(3)  編輯 收藏 引用

            Feedback

            # re: 關于while(cin)  回復  更多評論   

            2009-09-06 19:06 by OwnWaterloo
            >> 控制結構中的布爾條件值并不是非得直接轉換為bool不可,只要能夠轉換為某個整數型別或指針型別就夠了。

            選void* 而不是整數類型是有原因的。 可以避免如下代碼被編譯通過:
            cin<< xxx;


            streambuf是重點之一。
            istream 負責格式化輸入, ostream負責格式化輸出。
            streambuf 如其名那樣, 作為格式化結果與最終輸出目的地之間的緩存。

            而stringstream, fstream, 沒有太多的功能。
            格式化功能是繼承自iostream。
            而它們使用的是stringbuf, filebuf, 是streambuf的子類, 提供一些額外功能。
            stringstream, fstream比iostream多的功能, 正是其buf提供的。

            # re: 關于while(cin)  回復  更多評論   

            2009-09-06 20:16 by zyb_debug
            @OwnWaterloo
            恩 istream ostream里面的文件讀取主要是通過streambuf,維護這個東西實現的。
            我估計是閱讀的太快了,總是感覺有些理解不了。
            而且我現在讀取文件數據都用的是XML,IO這塊沒費心。
            其實我覺得最有用的是STL里的算法和容器

            # re: 關于while(cin)  回復  更多評論   

            2009-09-09 23:39 by Chuck
            傳說有一個版本的cin中是這么來處理轉換的

            operator int ();

            int i;
            while ( cin>>i ) {}

            那么這一句就會被編譯為 cin這個整數值 右移 i位
            精品熟女少妇a∨免费久久| 无码精品久久久天天影视| 99久久精品费精品国产| 久久男人AV资源网站| 国产精品99久久久久久宅男小说| 久久综合久久美利坚合众国| …久久精品99久久香蕉国产 | 欧美大香线蕉线伊人久久| 99久久婷婷免费国产综合精品| 国产精品无码久久四虎| 久久夜色精品国产网站| 久久久久久无码国产精品中文字幕 | 九九99精品久久久久久| 国内精品久久久久影院亚洲| 好久久免费视频高清| 久久人人爽人人爽人人片AV不 | 久久亚洲精精品中文字幕| 国产无套内射久久久国产| 麻豆AV一区二区三区久久| 亚洲Av无码国产情品久久| 国产亚洲色婷婷久久99精品91| 亚洲欧美成人综合久久久| 久久天天躁狠狠躁夜夜不卡| 色综合色天天久久婷婷基地| 99久久超碰中文字幕伊人| 99久久无色码中文字幕人妻| 久久天天躁狠狠躁夜夜不卡| 久久国产美女免费观看精品| 亚洲天堂久久精品| 超级碰久久免费公开视频| 免费观看久久精彩视频| 99久久777色| 91秦先生久久久久久久| 国产福利电影一区二区三区久久老子无码午夜伦不 | 久久这里只有精品首页| 亚洲国产精品无码久久久久久曰| 国产精品亚洲美女久久久| 国内精品久久久久久久影视麻豆 | 久久精品一区二区三区中文字幕| 99久久精品无码一区二区毛片| 热久久国产精品|