青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 297,  comments - 15,  trackbacks - 0

原 : http://feeds.feedburner.com/~r/Tony987/~3/14440522/

1、什么是const?
   常類型是指使用類型修飾符const說(shuō)明的類型,常類型的變量或?qū)ο蟮闹凳遣荒鼙桓碌摹#ó?dāng)然,我們可以偷梁換柱進(jìn)行更新:)

2、為什么引入const?
  const 推出的初始目的,正是為了取代預(yù)編譯指令,消除它的缺點(diǎn),同時(shí)繼承它的優(yōu)點(diǎn)。

3、cons有什么主要的作用?
   (1)可以定義const常量,具有不可變性。
        例如:
             const int Max=100;
             int Array[Max];        
   (2)便于進(jìn)行類型檢查,使編譯器對(duì)處理內(nèi)容有更多了解,消除了一些隱患。
例如:
             void f(const int i) { .........}
        編譯器就會(huì)知道i是一個(gè)常量,不允許修改;
   (3)可以避免意義模糊的數(shù)字出現(xiàn),同樣可以很方便地進(jìn)行參數(shù)的調(diào)整和修改。
        同宏定義一樣,可以做到不變則已,一變都變!如(1)中,如果想修改Max的內(nèi)容,只需要:const int Max=you want;即可!
   (4)可以保護(hù)被修飾的東西,防止意外的修改,增強(qiáng)程序的健壯性。
        還是上面的例子,如果在函數(shù)體內(nèi)修改了i,編譯器就會(huì)報(bào)錯(cuò);
        例如:
             void f(const int i) { i=10;//error! }
    (5) 為函數(shù)重載提供了一個(gè)參考。
         class A
         {
           ......
           void f(int i)       {......} file://一個(gè)函數(shù)
           void f(int i) const {......} file://上一個(gè)函數(shù)的重載
            ......
          };
     (6) 可以節(jié)省空間,避免不必要的內(nèi)存分配。
         例如:
              #define PI 3.14159         file://常量宏
              const doulbe  Pi=3.14159;  file://此時(shí)并未將Pi放入ROM中
              ......
              double i=Pi;               file://此時(shí)為Pi分配內(nèi)存,以后不再分配!
              double I=PI;               file://編譯期間進(jìn)行宏替換,分配內(nèi)存
              double j=Pi;               file://沒(méi)有內(nèi)存分配
              double J=PI;               file://再進(jìn)行宏替換,又一次分配內(nèi)存!
         const定義常量從匯編的角度來(lái)看,只是給出了對(duì)應(yīng)的內(nèi)存地址,而不是象#define一樣給出的是立即數(shù),所以,const定義的常量在程序運(yùn)行過(guò)程中只有一份拷貝,而#define定義的常量在內(nèi)存中有若干個(gè)拷貝。
     (7) 提高了效率。
           編譯器通常不為普通const常量分配存儲(chǔ)空間,而是將它們保存在符號(hào)表中,這使得它成為一個(gè)編譯期間的常量,沒(méi)有了存儲(chǔ)與讀內(nèi)存的操作,使得它的效率也很高。

3、如何使用const?
   (1)修飾一般常量
     一般常量是指簡(jiǎn)單類型的常量。這種常量在定義時(shí),修飾符const可以用在類型說(shuō)明符前,也可以用在類型說(shuō)明符后。
       例如:   
           int const x=2;  或  const int x=2;
   (2)修飾常數(shù)組
       定義或說(shuō)明一個(gè)常數(shù)組可采用如下格式:
       int const a[5]={1, 2, 3, 4, 5}; 
         const int a[5]={1, 2, 3, 4, 5};
   (3)修飾常對(duì)象
      常對(duì)象是指對(duì)象常量,定義格式如下:
           class A;
       const A a;
           A const a;
      定義常對(duì)象時(shí),同樣要進(jìn)行初始化,并且該對(duì)象不能再被更新,修飾符const可以放在類名后面,也可以放在類名前面。 
   (4)修飾常指針
        const int *A;        file://const修飾指向的對(duì)象,A可變,A指向的對(duì)象不可變
        int const *A;       file://const修飾指向的對(duì)象,A可變,A指向的對(duì)象不可變
        int *const A;       file://const修飾指針A,     A不可變,A指向的對(duì)象可變
        const int *const A;  file://指針A和A指向的對(duì)象都不可變
   (5)修飾常引用
        使用const修飾符也可以說(shuō)明引用,被說(shuō)明的引用為常引用,該引用所引用的對(duì)象不能被更新。其定義格式如下:
       const double & v;
  (6)修飾函數(shù)的常參數(shù)
        const修飾符也可以修飾函數(shù)的傳遞參數(shù),格式如下:
        void Fun(const int Var);
        告訴編譯器Var在函數(shù)體中的無(wú)法改變,從而防止了使用者的一些無(wú)意的或錯(cuò)誤的修改。     
   (7)修飾函數(shù)的返回值:
        const修飾符也可以修飾函數(shù)的返回值,是返回值不可被改變,格式如下:
            const int Fun1();
            const MyClass Fun2();
   (8)修飾類的成員函數(shù):
        const修飾符也可以修飾類的成員函數(shù),格式如下:
            class ClassName
     {
             public:
                  int Fun() const;
                    .....
             };
        這樣,在調(diào)用函數(shù)Fun時(shí)就不能修改類里面的數(shù)據(jù)
    (9)在另一連接文件中引用const常量
         extern const int i;     file://正確的引用
         extern const int j=10;  file://錯(cuò)誤!常量不可以被再次賦值
    另外,還要注意,常量必須初始化!
         例如:
             const int i=5;  

4、幾點(diǎn)值得討論的地方:
   (1)const究竟意味著什么?
        說(shuō)了這么多,你認(rèn)為const意味著什么?一種修飾符?接口抽象?一種新類型?
        也許都是,在Stroustup最初引入這個(gè)關(guān)鍵字時(shí),只是為對(duì)象放入ROM做出了一種可能,對(duì)于const對(duì)象,C++既允許對(duì)其進(jìn)行靜態(tài)初始化,也允許對(duì)他進(jìn)行動(dòng)態(tài)初始化。理想的const對(duì)象應(yīng)該在其構(gòu)造函數(shù)完成之前都是可寫(xiě)的,在析夠函數(shù)執(zhí)行開(kāi)始后也都是可寫(xiě)的,換句話說(shuō),const對(duì)象具有從構(gòu)造函數(shù)完成到析夠函數(shù)執(zhí)行之前的不變性,如果違反了這條規(guī)則,結(jié)果都是未定義的!雖然我們把const放入ROM中,但這并不能夠保證const 的任何形式的墮落,我們后面會(huì)給出具體的辦法。無(wú)論const對(duì)象被放入ROM中,還是通過(guò)存儲(chǔ)保護(hù)機(jī)制加以保護(hù),都只能保證,對(duì)于用戶而言這個(gè)對(duì)象沒(méi)有改變。換句話說(shuō),廢料收集器(我們以后會(huì)詳細(xì)討論,這就一筆帶過(guò))或數(shù)據(jù)庫(kù)系統(tǒng)對(duì)一個(gè)const的修改怎沒(méi)有任何問(wèn)題。
   (2)位元const V.S. 抽象const?
        對(duì)于關(guān)鍵字const的解釋有好幾種方式,最常見(jiàn)的就是位元const 和 抽象const。下面我們看一個(gè)例子:
        class A
        {
         public:
               ......
               A f(const A& a);
               ......
         };
         如果采用抽象const進(jìn)行解釋,那就是f函數(shù)不會(huì)去改變所引用對(duì)象的抽象值,如果采用位元const進(jìn)行解釋,那就成了f函數(shù)不會(huì)去改變所引用對(duì)象的任何位元。
         我們可以看到位元解釋正是c++對(duì)const問(wèn)題的定義,const成員函數(shù)不被允許修改它所在對(duì)象的任何一個(gè)數(shù)據(jù)成員。
         為什么這樣呢?因?yàn)槭褂梦辉猚onst有2個(gè)好處:
         最大的好處是可以很容易地檢測(cè)到違反位元const規(guī)定的事件:編譯器只用去尋找有沒(méi)有對(duì)數(shù)據(jù)成員的賦值就可以了。另外,如果我們采用了位元 const,那么,對(duì)于一些比較簡(jiǎn)單的const對(duì)象,我們就可以把它安全的放入ROM中,對(duì)于一些程序而言,這無(wú)疑是一個(gè)很重要的優(yōu)化方式。(關(guān)于優(yōu)化處理,我們到時(shí)候?qū)iT進(jìn)行討論)
         當(dāng)然,位元const也有缺點(diǎn),要不然,抽象const也就沒(méi)有產(chǎn)生的必要了。
         首先,位元const的抽象性比抽象const的級(jí)別更低!實(shí)際上,大家都知道,一個(gè)庫(kù)接口的抽象性級(jí)別越低,使用這個(gè)庫(kù)就越困難。
         其次,使用位元const的庫(kù)接口會(huì)暴露庫(kù)的一些實(shí)現(xiàn)細(xì)節(jié),而這往往會(huì)帶來(lái)一些負(fù)面效應(yīng)。所以,在庫(kù)接口和程序?qū)崿F(xiàn)細(xì)節(jié)上,我們都應(yīng)該采用抽象const。
         有時(shí),我們可能希望對(duì)const做出一些其它的解釋,那么,就要注意了,目前,大多數(shù)對(duì)const的解釋都是類型不安全的,這里我們就不舉例子了,你可以自己考慮一下,總之,我們盡量避免對(duì)const的重新解釋。
   (3)放在類內(nèi)部的常量有什么限制?
        看看下面這個(gè)例子:
        class A
        {
         private:
           const int c3 = 7;           // ???
       static int c4 = 7;          // ???
       static const float c5 = 7;  // ???
          ......
  };
         你認(rèn)為上面的3句對(duì)嗎?呵呵,都不對(duì)!使用這種類內(nèi)部的初始化語(yǔ)法的時(shí)候,常量必須是被一個(gè)常量表達(dá)式初始化的整型或枚舉類型,而且必須是static和const形式。這顯然是一個(gè)很嚴(yán)重的限制!
         那么,我們的標(biāo)準(zhǔn)委員會(huì)為什么做這樣的規(guī)定呢?一般來(lái)說(shuō),類在一個(gè)頭文件中被聲明,而頭文件被包含到許多互相調(diào)用的單元去。但是,為了避免復(fù)雜的編譯器規(guī)則,C++要求每一個(gè)對(duì)象只有一個(gè)單獨(dú)的定義。如果C++允許在類內(nèi)部定義一個(gè)和對(duì)象一樣占據(jù)內(nèi)存的實(shí)體的話,這種規(guī)則就被破壞了。
    (4)如何初始化類內(nèi)部的常量?
         一種方法就是static 和 const 并用,在內(nèi)部初始化,如上面的例子;
         另一個(gè)很常見(jiàn)的方法就是初始化列表:
         class A
         {
          public:
                A(int i=0):test(i) {}
          private:
                const int i;
          };
          還有一種方式就是在外部初始化,例如:
         class A
         {
          public:
                A() {}
          private:
                static const int i;  file://注意必須是靜態(tài)的!
          };
          const int A::i=3;
     (5)常量與數(shù)組的組合有什么特殊嗎?
          我們給出下面的代碼:
           const int size[3]={10,20,50};
           int array[size[2]];
           有什么問(wèn)題嗎?對(duì)了,編譯通不過(guò)!為什么呢?
           const可以用于集合,但編譯器不能把一個(gè)集合存放在它的符號(hào)表里,所以必須分配內(nèi)存。在這種情況下,const意味著“不能改變的一塊存儲(chǔ)”。然而,其值在編譯時(shí)不能被使用,因?yàn)榫幾g器在編譯時(shí)不需要知道存儲(chǔ)的內(nèi)容。自然,作為數(shù)組的大小就不行了:)
         你再看看下面的例子:
          class A
         {
          public:
                A(int i=0):test[2]({1,2}) {} file://你認(rèn)為行嗎?
          private:
                const int test[2];
          };
         vc6下編譯通不過(guò),為什么呢?
         關(guān)于這個(gè)問(wèn)題,前些時(shí)間,njboy問(wèn)我是怎么回事?我反問(wèn)他:“你認(rèn)為呢?”他想了想,給出了一下解釋,大家可以看看:我們知道編譯器堆初始化列表的操作是在構(gòu)造函數(shù)之內(nèi),顯式調(diào)用可用代碼之前,初始化的次序依據(jù)數(shù)據(jù)聲明的次序。初始化時(shí)機(jī)應(yīng)該沒(méi)有什么問(wèn)題,那么就只有是編譯器對(duì)數(shù)組做了什么手腳!其實(shí)做什么手腳,我也不知道,我只好對(duì)他進(jìn)行猜測(cè):編譯器搜索到test發(fā)現(xiàn)是一個(gè)非靜態(tài)的數(shù)組,于是,為他分配內(nèi)存空間,這里需要注意了,它應(yīng)該是一下分配完,并非先分配test[0],然后利用初始化列表初始化,再分配test[1],這就導(dǎo)致數(shù)組的初始化實(shí)際上是賦值!然而,常量不允許賦值,所以無(wú)法通過(guò)。
        呵呵,看了這一段冠冕堂皇的話,真讓我笑死了!njboy別怪我揭你短呀:)我對(duì)此的解釋是這樣的:C++標(biāo)準(zhǔn)有一個(gè)規(guī)定,不允許無(wú)序?qū)ο笤陬悆?nèi)部初始化,數(shù)組顯然是一個(gè)無(wú)序的,所以這樣的初始化是錯(cuò)誤的!對(duì)于他,只能在類的外部進(jìn)行初始化,如果想讓它通過(guò),只需要聲明為靜態(tài)的,然后初始化。
         這里我們看到,常量與數(shù)組的組合沒(méi)有什么特殊!一切都是數(shù)組惹的禍!
   (6)this指針是不是const類型的?
        this指針是一個(gè)很重要的概念,那該如何理解她呢?也許這個(gè)話題太大了,那我們縮小一些:this指針是個(gè)什么類型的?這要看具體情況:如果在非 const成員函數(shù)中,this指針只是一個(gè)類類型的;如果在const成員函數(shù)中,this指針是一個(gè)const類類型的;如果在volatile成員函數(shù)中,this指針就是一個(gè)volatile類類型的。
   (7)const到底是不是一個(gè)重載的參考對(duì)象?
        先看一下下面的例子:
        class A
         {
           ......
           void f(int i)       {......} file://一個(gè)函數(shù)
           void f(int i) const {......} file://上一個(gè)函數(shù)的重載
            ......
          };
        上面是重載是沒(méi)有問(wèn)題的了,那么下面的呢?
         class A
         {
           ......
           void f(int i)       {......} file://一個(gè)函數(shù)
           void f(const int i) {......} file://?????
            ......
         };
         這個(gè)是錯(cuò)誤的,編譯通不過(guò)。那么是不是說(shuō)明內(nèi)部參數(shù)的const不予重載呢?再看下面的例子:
        class A
         {
           ......
           void f(int& )       {......} file://一個(gè)函數(shù)
           void f(const int& ) {......} file://?????
            ......
         };
         這個(gè)程序是正確的,看來(lái)上面的結(jié)論是錯(cuò)誤的。為什么會(huì)這樣呢?這要涉及到接口的透明度問(wèn)題。按值傳遞時(shí),對(duì)用戶而言,這是透明的,用戶不知道函數(shù)對(duì)形參做了什么手腳,在這種情況下進(jìn)行重載是沒(méi)有意義的,所以規(guī)定不能重載!當(dāng)指針或引用被引入時(shí),用戶就會(huì)對(duì)函數(shù)的操作有了一定的了解,不再是透明的了,這時(shí)重載是有意義的,所以規(guī)定可以重載。
   (8)什么情況下為const分配內(nèi)存?
        以下是我想到的可能情況,當(dāng)然,有的編譯器進(jìn)行了優(yōu)化,可能不分配內(nèi)存。
        A、作為非靜態(tài)的類成員時(shí);
        B、用于集合時(shí);
        C、被取地址時(shí);
        D、在main函數(shù)體內(nèi)部通過(guò)函數(shù)來(lái)獲得值時(shí);
        E、const的 class或struct有用戶定義的構(gòu)造函數(shù)、析構(gòu)函數(shù)或基類時(shí);。
        F、當(dāng)const的長(zhǎng)度比計(jì)算機(jī)字長(zhǎng)還長(zhǎng)時(shí);
        G、參數(shù)中的const;
        H、使用了extern時(shí)。
        不知道還有沒(méi)有其他情況,歡迎高手指點(diǎn):)        
   (9)臨時(shí)變量到底是不是常量?
        很多情況下,編譯器必須建立臨時(shí)對(duì)象。像其他任何對(duì)象一樣,它們需要存儲(chǔ)空間而且必須被構(gòu)造和刪除。區(qū)別是我們從來(lái)看不到編譯器負(fù)責(zé)決定它們的去留以及它們存在的細(xì)節(jié)。對(duì)于C++標(biāo)準(zhǔn)草案而言:臨時(shí)對(duì)象自動(dòng)地成為常量。因?yàn)槲覀兺ǔ=佑|不到臨時(shí)對(duì)象,不能使用與之相關(guān)的信息,所以告訴臨時(shí)對(duì)象做一些改變有可能會(huì)出錯(cuò)。當(dāng)然,這與編譯器有關(guān),例如:vc6、vc7都對(duì)此作了擴(kuò)展,所以,用臨時(shí)對(duì)象做左值,編譯器并沒(méi)有報(bào)錯(cuò)。
   (10)與static搭配會(huì)不會(huì)有問(wèn)題?
        假設(shè)有一個(gè)類:
        class A
        {
         public:
             ......
             static void f() const { ......}
             ......
         };
         我們發(fā)現(xiàn)編譯器會(huì)報(bào)錯(cuò),因?yàn)樵谶@種情況下static不能夠與const共存!
         為什么呢?因?yàn)閟tatic沒(méi)有this指針,但是const修飾this指針,所以...
     (11)如何修改常量?
          有時(shí)候我們卻不得不對(duì)類內(nèi)的數(shù)據(jù)進(jìn)行修改,但是我們的接口卻被聲明了const,那該怎么處理呢?我對(duì)這個(gè)問(wèn)題的看法如下:
           1)標(biāo)準(zhǔn)用法:mutable
              class A
              {
               public:
                      A(int i=0):test(i)        { }
                      void SetValue(int i)const { test=i; }
               private:
                      mutable int test;   file://這里處理!
               };
           2)強(qiáng)制轉(zhuǎn)換:const_cast
               class A
               {
               public:
                      A(int i=0):test(i)        { }
                      void SetValue(int i)const
                      { const_cast (test)=i; }//這里處理!
               private:
                      int test;   
               };
            3)靈活的指針:int*
               class A
              {
               public:
                      A(int i=0):test(i)        { }
                      void SetValue(int i)const
                      { *test=i; }
               private:
                      int* test;   file://這里處理!
               };
            4)未定義的處理
              class A
              {
               public:
                      A(int i=0):test(i)        { }
                      void SetValue(int i)const
                      { int *p=(int*)&test; *p=i; }//這里處理!
               private:
                      int test;   
               };
                注意,這里雖然說(shuō)可以這樣修改,但結(jié)果是未定義的,避免使用!
             5)內(nèi)部處理:this指針
              class A
              {
               public:
                      A(int i=0):test(i)        { }
                      void SetValue(int i)const
                      { ((A*)this)->test=i; }//這里處理!
               private:
                      int test;   
               };
             6)最另類的處理:空間布局
               class A
               {
                public:
                      A(int i=0):test(i),c('a') {  }
                private:
                      char c;
                      const int test;
                };
                int main()
                {
                    A a(3);
                    A* pa=&a;
                    char* p=(char*)pa;     
                    int*  pi=(int*)(p+4);//利用邊緣調(diào)整
                    *pi=5;                 file://此處改變了test的值!
                    return 0;
                 }
        雖然我給出了6中方法,但是我只是想說(shuō)明如何更改,但出了第一種用法之外,另外5種用法,我們并不提倡,不要因?yàn)槲疫@么寫(xiě)了,你就這么用,否則,我真是要誤人子弟了:)
     (12)最后我們來(lái)討論一下常量對(duì)象的動(dòng)態(tài)創(chuàng)建。
           既然編譯器可以動(dòng)態(tài)初始化常量,就自然可以動(dòng)態(tài)創(chuàng)建,例如:
           const int* pi=new const int(10);
           這里要注意2點(diǎn):
           1)const對(duì)象必須被初始化!所以(10)是不能夠少的。
           2)new返回的指針必須是const類型的。
           那么我們可不可以動(dòng)態(tài)創(chuàng)建一個(gè)數(shù)組呢?
           答案是否定的,因?yàn)閚ew內(nèi)置類型的數(shù)組,不能被初始化。
           這里我們忽視了數(shù)組是類類型的,同樣對(duì)于類內(nèi)部數(shù)組初始化我們也做出了這樣的忽視,因?yàn)檫@涉及到數(shù)組的問(wèn)題,我們以后再討論。

posted on 2009-03-27 10:31 chatler 閱讀(244) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C++_BASIS
<2009年3月>
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感覺(jué)這個(gè)博客還是不錯(cuò),雖然做的東西和我不大相關(guān),覺(jué)得看看還是有好處的

network

OSS

  • Google Android
  • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
  • os161 file list

overall

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美电影电视剧在线观看| 亚洲色在线视频| 欧美成人激情在线| 一本大道久久a久久综合婷婷| 亚洲成人自拍视频| 欧美96在线丨欧| 日韩一区二区精品视频| 一本色道精品久久一区二区三区| 国产精品久久久久久久浪潮网站 | 欧美日韩在线综合| 亚洲欧美日韩国产精品| 欧美一区二区视频免费观看| 亚洲高清在线观看一区| 中日韩高清电影网| 尤物在线观看一区| aaa亚洲精品一二三区| 国产在线麻豆精品观看| 亚洲精品免费看| 国产亚洲精品久久久久久| 欧美激情第9页| 国产精品视频网站| 欧美黑人在线播放| 国产精品你懂的| 最新精品在线| 国产区欧美区日韩区| 亚洲国产精品成人| 国产喷白浆一区二区三区| 亚洲承认在线| 国产永久精品大片wwwapp| 亚洲日韩成人| 极品尤物av久久免费看| 中文日韩在线视频| 亚洲精品久久久久久久久久久久久 | 国产亚洲精品bt天堂精选| 亚洲福利在线看| 国产一区二区三区av电影| 亚洲三级视频| 亚洲国产你懂的| 欧美一区午夜视频在线观看| 在线亚洲激情| 欧美大片一区二区三区| 久久综合九色九九| 国产九九精品视频| 亚洲视频日本| 日韩一区二区精品葵司在线| 老司机精品导航| 久久精品国产亚洲高清剧情介绍| 欧美特黄一级| 亚洲乱码国产乱码精品精98午夜| 亚洲福利视频网站| 久久精品99久久香蕉国产色戒| 亚洲欧美日韩成人高清在线一区| 欧美激情一区二区三区蜜桃视频 | 亚洲专区免费| 欧美日韩亚洲不卡| 亚洲国产一区二区三区青草影视 | 欧美精品综合| 亚洲国产精品久久| 亚洲激情综合| 欧美福利视频| 亚洲人成网站999久久久综合| 亚洲精品1区| 免费看的黄色欧美网站| 亚洲福利视频专区| 日韩视频久久| 欧美色中文字幕| 一区二区三区蜜桃网| 亚洲一区激情| 国产精品午夜电影| 久久精品人人做人人爽电影蜜月 | 99精品欧美一区二区三区| 欧美精品成人在线| av不卡在线| 午夜激情综合网| 国产亚洲欧美色| 久久久综合网| 最近中文字幕日韩精品| av成人动漫| 国产精品视频导航| 久久久欧美精品sm网站| 欧美成人69| 亚洲视频在线播放| 国产区欧美区日韩区| 久久久最新网址| 亚洲精品女人| 亚洲小视频在线观看| 国产精品一区免费观看| 久久手机精品视频| aa亚洲婷婷| 午夜在线不卡| 国产精品99久久久久久久女警 | 亚洲黄色成人| 欧美日韩国内| 亚洲免费一在线| 免费人成网站在线观看欧美高清 | 国模私拍一区二区三区| 欧美福利电影在线观看| 亚洲综合色丁香婷婷六月图片| 久久综合亚州| 亚洲丝袜av一区| 在线播放不卡| 国产精品久久久一本精品| 久久久久久伊人| 亚洲一二三区视频在线观看| 免费不卡视频| 香蕉久久一区二区不卡无毒影院| 亚洲成人自拍视频| 国产精品久久久久久亚洲毛片| 久久午夜电影网| 亚洲在线国产日韩欧美| 欧美国产先锋| 久久亚洲精品一区二区| 亚洲一区美女视频在线观看免费| 在线成人黄色| 国产在线精品二区| 国产精品美女www爽爽爽| 麻豆成人在线观看| 性娇小13――14欧美| 一区二区三区免费看| 亚洲激情成人网| 蜜臀91精品一区二区三区| 性一交一乱一区二区洋洋av| 一区二区三区高清在线| 欧美激情亚洲激情| 狂野欧美一区| 久久青草欧美一区二区三区| 亚洲欧美视频在线| 亚洲一线二线三线久久久| 日韩视频在线一区二区| 亚洲国产经典视频| 欧美韩日一区二区| 欧美国产专区| 欧美激情一区二区三区四区| 久久女同精品一区二区| 久久精品国产清自在天天线 | 99国产精品国产精品毛片| 亚洲国产欧美日韩另类综合| 1769国内精品视频在线播放| 黄网动漫久久久| 在线观看三级视频欧美| 影视先锋久久| 伊人久久婷婷| 亚洲电影av| 亚洲三级免费| 日韩视频免费在线观看| 一本一道久久综合狠狠老精东影业| 亚洲精品网站在线播放gif| 亚洲美女色禁图| 一本大道久久a久久精二百| 亚洲午夜91| 欧美亚洲在线播放| 久久免费视频在线| 亚洲高清在线视频| 亚洲精选国产| 午夜电影亚洲| 久久久久久色| 欧美激情一区二区久久久| 欧美性大战久久久久久久| 国产欧美va欧美va香蕉在| 国产一区白浆| 亚洲精品一二三| 亚洲一区在线直播| 久久精品免费电影| 亚洲第一色在线| 亚洲视频免费观看| 久久久久久久国产| 欧美日韩精品欧美日韩精品| 国产欧美va欧美va香蕉在| 亚洲大胆女人| 亚洲综合欧美| 欧美不卡三区| 亚洲一本视频| 欧美a级片一区| 国产精品私拍pans大尺度在线| 国内精品免费在线观看| 亚洲免费电影在线观看| 久久国产视频网| 亚洲人成人一区二区三区| 性亚洲最疯狂xxxx高清| 欧美高清在线视频| 国产亚洲欧洲997久久综合| 亚洲人体偷拍| 欧美一区二区三区的| 最近看过的日韩成人| 欧美一区二区在线观看| 欧美日韩视频| 亚洲国产精品久久精品怡红院| 亚洲欧美日本日韩| 欧美激情久久久久久| 欧美一级片久久久久久久| 欧美日韩精品不卡| 亚洲二区精品| 久久久久久一区| 中文国产一区| 欧美日韩99| 亚洲精品久久久久久久久久久| 久久美女艺术照精彩视频福利播放| 一本色道久久综合狠狠躁篇的优点| 久久综合九色综合欧美狠狠| 国产一区二区日韩|