<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-144  評論-80  文章-1  trackbacks-0

    8.5關于名字空間定義
        全局實體(global entity)
        全局名字空間污染(global namespace pollution)

    8.5.1名字空間定義
        namespace 開頭,后面是名字空間的名字。

        namespace cplusplus_primer {
         class matrix {/*****/};
         void inverse(matrix &);
         matrix operator+(const matrix &m1,matrix &m2)
         {
          /******/
         }
         const double pi = 3.1416;
       
        }


        在名字空間cplusplus_primer中聲明的類的名字是
        cplusplus_primer::matrix
        函數的名字是
        cplusplus_primer::inverse()
        常量的名字是
        cplusplus_primer::pi

        類,函數,常量被聲明它的名字空間的名字限定修飾:
        這些名字被成為限定修飾符(qualified name)


        名字空間的定義不一定是連續的.例如
        namespace cplusplus_primer{
        class  matrix {/*****/}
        const double pi = 3.1416;

        }

        namespace cplusplus_primer{
        void inverse(matrix &);
        matrix operator+ (const matrix &m1,const matrix &m2)
            {/********/}
        }

        名字空間的定義可是非連續的,這對生成一個庫很有幫助,它使我們更容易將庫的源代碼組織成
        接口和實現部分。

     8.5.2域操作符
         ::
         用戶聲明的名字空間成員名自動被加上前綴,名字空間名后面加上域操作符(::),名字空間成員名
         由該名字空間名進行限定修飾。

         名字空間成員的聲明被隱藏在其名字空間中,除非我們為編譯器指定查找的聲明的名字空間,否則
         編譯器將在當前域及嵌套包含當前域的域中查找該名字的聲明。

         注意!!!
         域操作符也可以被用來引用全局名字空間的成員。因為全局名字空間沒有名字。
         ::member_name
         指的是全局名字空間的成員。

         #include <iostream>
         const int max = 65000;
         const int lineLength = 12;

         void fibonacci(int max)
         {
            if (max <2) return;
     cout << "0 1";
     int v1 = 0,v2=1,cur;
     for (int ix=3;ix <= max;++ix)
     {
         cur = v1+v2;
         if(cur>::max) break;   //引用全局名字空間的變量;
         cout << cur <<"";
         v1=v2;
         v2=cur;
         if(ix % lineLength ==0) cout << endl;
     }
         }

    8.5.3 嵌套名字空間
         
          。。。。。


    8.6 使用名字空間成員

         使用限定修飾的名字形式namespace_name::member_name來引用名字空間,毫無疑問是非常麻煩的。

         using 聲明,using指示符

    8.6.1 名字空間別名
        
         namespace International_Business_Machines
         {/*********/}

         namespace IBM = International_Business_Machines;

    8.6.2 using聲明
       
        
          namespace cplusplus_primer
          {
            namespace MatrixLib
            {
             class matrix {/******/};
            }
          }

          
          using cplusplus::MatrixLib::matrix;
         

     

          using 聲明引入的名字有以下特性:
           1> 它在該域中必須唯一。
           2> 由外圍域中聲明引入的相同名字被其隱藏。
           3> 它被嵌套域中的相同名字的聲明隱藏。


           namespace blip {
            int bi = 16,bj = 15, bk = 23;

           }

           int bj = 0;

           void mainip()
           {
             using blip::bi;    //函數mainip()中的bi指向blip::bi
      ++bi;              //設置blip::bi為17
      using blip::bj     //隱藏全局域中的bj
      ++bj;
      int bk;            //bk在局部域中聲明
      using blip:bk;     //錯誤:在mainip()中重復定義bk


           }

           int wrongInit = bk; //錯誤:bk在這里不可見


    8.6.3 using 指示符


           namespace blip{
           int bi = 16,bj = 15, bk = 23;
           }

           int bj = 0;

           void mainip()
           {
             using namespace blip;

      ++bi;       //設置blip::bi為17;
      ++bj;        //錯誤:二義性
                     全局bj還是blip:bj?

             ++::bj;     // 設置全局bj為1  
      ++blip::bj; // 設置blip::bj為16
      int bk = 97; //局部bk隱藏blip:bk
      ++bk;        //設置局部bk為98

          
           }

     

    當我們把一個應用程序移植到一個包裝在名字空間中的新版本時,using指示符非常
    有用,但是使用多個using指示符會引起全局名字空間污染問題。
    用多個選擇性的using聲明來代替using指示符會使這個問題最小化,由多個using
    聲明引起的二義性的錯誤在聲明點就能被檢測到,因此建議使用using聲明而不是
    using指示符,以便更好地控制程序中地全局名字空間污染問題。
          

     


     

    posted on 2005-07-11 13:24 小力力力 閱讀(2387) 評論(1)  編輯  收藏 所屬分類: C/C++

    評論:
    # re: c++ primer 筆記(名字空間) 2008-07-19 03:32 | asdwq
    awdqwdq  回復  更多評論
      
    主站蜘蛛池模板: 暖暖免费在线中文日本| 免费国产黄网站在线观看动图| 精品一区二区三区高清免费观看| 日本免费中文字幕在线看| 久久狠狠爱亚洲综合影院| 免费成人福利视频| 亚洲另类图片另类电影| 久久久高清免费视频| 亚洲免费网站观看视频| 国产伦精品一区二区三区免费下载| 亚洲另类无码专区丝袜| 免费观看四虎精品国产永久| 日本特黄特色AAA大片免费| 亚洲精品国产电影| 成在人线av无码免费高潮喷水| 亚洲国产精品乱码一区二区| 最刺激黄a大片免费网站| 成人黄色免费网站| 亚洲AV无码成人专区片在线观看| 久久不见久久见免费影院www日本| 爱情岛论坛网亚洲品质自拍| 成人性生交大片免费看中文| 亚洲美女激情视频| 欧洲美熟女乱又伦免费视频| 免费人成动漫在线播放r18| mm1313亚洲精品无码又大又粗| 中国好声音第二季免费播放| 亚洲黄色在线观看网站| 男人的好免费观看在线视频| 青青视频免费在线| 亚洲精品成人网站在线观看| 久久久久久精品免费免费自慰| 亚洲欧洲无卡二区视頻| 国产乱辈通伦影片在线播放亚洲| 最近中文字幕大全免费版在线 | 在线观看亚洲专区| 国产AV无码专区亚洲Av| 久久久久久久久免费看无码| 国产精品hd免费观看| 亚洲欧洲日产韩国在线| 啊灬啊灬别停啊灬用力啊免费看|