<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 小力力力 閱讀(2382) 評論(1)  編輯  收藏 所屬分類: C/C++

    評論:
    # re: c++ primer 筆記(名字空間) 2008-07-19 03:32 | asdwq
    awdqwdq  回復  更多評論
      
    主站蜘蛛池模板: 亚欧免费视频一区二区三区| 91精品国产免费| 国产亚洲精品AAAA片APP| 色天使亚洲综合在线观看| 亚洲制服丝袜精品久久| 亚洲春黄在线观看| 亚洲日本乱码一区二区在线二产线| 亚洲AV无码久久精品色欲| 亚洲精品第五页中文字幕| 亚洲最大中文字幕| 亚洲中文字幕精品久久| 亚洲精品无码一区二区| 特级毛片爽www免费版| 色欲色欲天天天www亚洲伊| 亚洲精品国产专区91在线| 亚洲中文字幕久久精品无码A| 国产精品日本亚洲777| 国产成人无码免费网站| 99在线免费观看| 中文字幕免费在线看| 国产精品黄页免费高清在线观看| 国产一级在线免费观看| 精品一区二区三区无码免费直播| 深夜特黄a级毛片免费播放| 精品久久久久久无码免费| 免费人成在线观看网站品爱网 | 亚洲AV永久青草无码精品| 亚洲女人影院想要爱| 日韩亚洲综合精品国产| 一区二区三区免费在线视频| 国产91免费视频| 久久影院亚洲一区| 亚洲av无码专区在线观看亚| 久久久久久AV无码免费网站下载 | 4480yy私人影院亚洲| 无套内射无矿码免费看黄| 黄色网址免费观看| 亚洲精品高清无码视频| 亚洲色偷偷偷综合网| 人妻无码久久一区二区三区免费| 亚洲 自拍 另类小说综合图区|