• <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>

            deepway

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              1 Posts :: 9 Stories :: 1 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(4)

            我參與的團隊

            搜索

            •  

            最新評論

            • 1.?re: 軟件運行日志[未登錄]
            • 我覺得調試日志不應該只記錄軟件的非正常過程吧,而是記錄軟件的運行過程。期間有不正常的時候用warning,error和fetal來記錄。
            • --hi


            看了會glog使用文檔,很快就被下面的語法形式吸引了,這顆語法糖,真是太完美了。 

            1         LOG(INFO) << "Found " << num_cookies << " cookies";
            2         CHECK(fp->Write(x) == 4)  <<  "Write failed!";
            3

            符號“<<”,第一眼就能理解,使用了流對象重載操作符“<<”的方法。

            問題是,如果LOG(INFO)實際上是一個流對象的話,那它怎么做到“在禁止輸出日志時不編譯“<<”右邊的代碼”呢?

            要知道LOG4cpplus,可以是用了下面的語法結構才實現的,依靠最后那個括號。glog的語法顯然更勝一籌了。
            1LOG(INFO,"Found" << num_cookies << " cookies"); 

            于是,跟蹤代碼,總于一窺真面目,大為感嘆。翻譯成原始代碼,應該這樣的,
            1LogMessage().stream() << "Found " << num_cookies << " cookies";
            巧妙之處,就在于LogMessage是一個類,LogMessage()生成了一個臨時局部對象,它的生命期僅在這一行代碼范圍內。
            就是說,這行結束的時候,LogMessage就被析構,在析構函數中,去執行真正的日志輸出。


            寫上面例子,是為了引出本文真正的主題,利用C++對象的生命期來實現特殊代碼控制流程。

            早年,學習Basic語言的時候,聽老師說了結構化編程中流程控制的三大元素“順序、選擇、循環”,真以為有了三大元素,便無所不能了,其他的都是多余的。

            但實際上,一個例外便是:在一個作用域開始時,執行一些代碼;在作用域退出時,執行另一些代碼。比如,Win32上的句柄管理,獲取了句柄,最后一定要釋放。

            我個人認為,這種流程控制,在現代C++編程中是如此重要,為其提供專門語法機制毫不為過。

            然而,C++前輩們用一種可說巧妙,也可卑劣的方式,來處理這個問題,即利用對象在作用域中的構造與析構。

            說它卑劣,是因為如此重要的特性,在C++教材里是找不到,使它得不到應有的重視。

            當然不管怎么說,這個特性是C++優于C的極少特例之一。


            總結一下,我們可以在四種對象作用范圍內,實現上述的特殊流程控制:

            1. 全局對象生命期。一般不推薦使用全局變量,沒有多少實際意義;
            2. 類成員變量,即類生命期。最典型的就是智能指針了。
            3.局部變量,即函數中的塊作用域。這是最普遍的,比如什么互斥量守護,資源句柄守護等等。
            4.局部匿名變量(不知道是否該這樣命名),在代碼行的作用域。這很少見,glog算是見到的第一個了。



            posted on 2010-08-03 19:23 maxime 閱讀(1214) 評論(0)  編輯 收藏 引用 所屬分類: C++ 語言
            免费久久人人爽人人爽av| 久久99精品久久久久久水蜜桃| 久久成人国产精品一区二区| 久久亚洲欧美日本精品| 国产成人久久激情91| 久久国产高清字幕中文| 国产成人精品免费久久久久| 精品多毛少妇人妻AV免费久久| 久久综合色区| 欧美色综合久久久久久| 无码人妻精品一区二区三区久久| 韩国三级大全久久网站| 久久午夜羞羞影院免费观看| 亚洲国产婷婷香蕉久久久久久 | 亚洲国产综合久久天堂| 久久久久久a亚洲欧洲aⅴ| 久久久久久国产精品美女| 国产毛片久久久久久国产毛片 | 久久久这里有精品| 婷婷久久精品国产| 国内精品久久久久影院日本| 国产精品久久久久久久久久免费| 93精91精品国产综合久久香蕉 | 99久久精品免费看国产一区二区三区 | av国内精品久久久久影院| 亚洲精品成人久久久| 伊人久久精品影院| 一本色道久久88—综合亚洲精品| 久久无码AV中文出轨人妻| 无码乱码观看精品久久| 亚洲婷婷国产精品电影人久久 | 91久久精一区二区三区大全| 蜜桃麻豆www久久| 久久无码一区二区三区少妇| 亚洲精品无码久久久| 99久久无色码中文字幕人妻| 综合网日日天干夜夜久久| 国产精品美女久久久m| 久久久久一本毛久久久| 亚洲国产成人乱码精品女人久久久不卡 | 久久天天躁狠狠躁夜夜avapp|