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

隨筆 - 30, 文章 - 0, 評論 - 64, 引用 - 0
數(shù)據(jù)加載中……

類型轉(zhuǎn)換高級 (Advacned Class Type-casting)

reinterpret_cast

reinterpret_cast 可以將一個指針轉(zhuǎn)換為任意其它類型的指針。
它也可以用來將一個指針轉(zhuǎn)換為一個整型,或反之亦然。

這個操作符可以在互不相關(guān)的類之間進(jìn)行指針轉(zhuǎn)換,
操作的結(jié)果是簡單的將一個指針的二進(jìn)制數(shù)據(jù)(binary copy)復(fù)制到另一個指針。
對指針指向的內(nèi)容不做任何檢查或轉(zhuǎn)換。

例如:

class A {};
class B {};
A * a = new A;
B * b = reinterpret_cast<B*>(a);

reinterpret_cast 對所有指針的處理與傳統(tǒng)的類型轉(zhuǎn)換符所作的一模一樣。

_________________________________________________________________

static_cast

static_cast 可以執(zhí)行所有能夠隱含執(zhí)行的類型轉(zhuǎn)換,以及它們的反向操作(即使這種方向操作是不允許隱含執(zhí)行的)。

用于類的指針,也就是說,它允許將一個引申類的指針轉(zhuǎn)換為其基類類型(這是可以被隱含執(zhí)行的有效轉(zhuǎn)換),同時也允許進(jìn)行相反的轉(zhuǎn)換:將一個基類轉(zhuǎn)換為一個引申類類型。

在后面一種情況中,不會檢查被轉(zhuǎn)換的基類是否真正完全是目標(biāo)類型的。例如下面的代碼是合法的:

class Base {};
class Derived: public Base {};
Base * a = new Base;
Derived * b = static_cast(a);

static_cast除了能夠?qū)︻愔羔樳M(jìn)行操作,還可以被用來進(jìn)行類中明確定義的轉(zhuǎn)換,以及對基本類型的標(biāo)準(zhǔn)轉(zhuǎn)換:

double d=3.14159265;
int i = static_cast<int>(d);

譯者注:如果你對這部分看不太懂,請結(jié)合下面的dynamic_cast一起看,也許會幫助理解。











dynamic_cast

dynamic_cast 完全被用來進(jìn)行指針的操作。它可以用來進(jìn)行任何可以隱含進(jìn)行的轉(zhuǎn)換操作以及它們被用于多態(tài)類情況下的方向操作。

然而與static_cast不同的是,
 dynamic_cast 會檢查后一種情況的操作是否合法,
也就是說它會檢查類型轉(zhuǎn)換操作是否會返回一個被要求類型的有效的完整的對象。

這種檢查是在程序運行過程中進(jìn)行的。如果被轉(zhuǎn)換的指針?biāo)赶虻膶ο蟛皇且粋€被要求類型的有效完整的對象,返回值將會是一個空指針NULL 。

   class Base { virtual dummy(){}; };
class Derived : public Base { };


Base* b1 = new Derived;
Base* b2 = new Base;
Derived* d1 = dynamic_cast(b1); // succeeds Derived* d2 = dynamic_cast(b2); // fails: returns NULL

如果類型轉(zhuǎn)換被用在引用(reference)類型上,而這個轉(zhuǎn)換不可能進(jìn)行的話,一個bad_cast 類型的例外(exception)將會被拋出:

  class Base { virtual dummy(){}; };
class Derived : public Base { };

Base* b1 = new Derived;
Base* b2 = new Base;
Derived d1 = dynamic_cast(b1); // succeeds Derived d2 = dynamic_cast(b2); // fails: exception thrown








const_cast

這種類型轉(zhuǎn)換對常量const 進(jìn)行設(shè)置或取消操作:

class C {};
const C * a = new C;
C * b = const_cast<C*> (a);

其他3種cast 操作符都不可以修改一個對象的常量屬性(constness)。




typeid

ANSI-C++ 還定義了一個新的操作符叫做 typeid ,
它檢查一個表達(dá)式的類型:

typeid (expression)

這個操作符返回一個類型為type_info的常量對象指針,這種類型定義在標(biāo)準(zhǔn)頭函數(shù)中。這種返回值可以用操作符 == 和 != 來互相進(jìn)行比較,
也可以用來通過name()函數(shù)獲得一個描述數(shù)據(jù)類型或類名稱的字符串,

例如:

    // typeid, typeinfo
            #include <iostream.h>
            #include <typeinfo>
            class CDummy { };
            int main () {
            CDummy* a,b;
            if (typeid(a) != typeid(b)) {
            cout << "a and b are of different types:\n";
            cout << "a is: " << typeid(a).name() << '\n';
            cout << "b is: " << typeid(b).name() << '\n';
            }
            return 0;
            }
            
a and b are of different types:
a is: class CDummy *
b is: class CDummy


posted @ 2008-12-08 12:58 henry08 閱讀(498) | 評論 (0)編輯 收藏

名空間 (Namespaces)

標(biāo)準(zhǔn)名空間(Namespace std)


 

我們能夠找到的關(guān)于名空間的最好的例子就是標(biāo)準(zhǔn)C++ 函數(shù)庫本身。

如ANSI C++ 標(biāo)準(zhǔn)定義,
標(biāo)準(zhǔn)C++庫中的所有類、對象和函數(shù)都是定義在名空間std下面的。

你可能已經(jīng)注意到,我們在這個教程中全部忽略了這一點。作者決定這么做是因為這條規(guī)則幾乎和ANSI 標(biāo)準(zhǔn)本身一樣年輕 (1997) ,許多老一點的編譯器并不兼容這條規(guī)則。

幾乎所有的編譯器,即使是那些與ANSI 標(biāo)準(zhǔn)兼容的編譯器,都允許使用傳統(tǒng)的頭文件 (如iostream.h, stdlib.h, 等等),就像我們在這個教程中所使用的一樣。


然而,ANSI標(biāo)準(zhǔn)完全重新設(shè)計了這些函數(shù)庫,
利用了模板功能,
而且遵循了這條規(guī)則將所有的函數(shù)和變量定義在了名空間std下。

該標(biāo)準(zhǔn)為這些頭文件定義了新的名字,對針對C++的文件基本上是使用同樣的名字,但沒有.h的擴(kuò)展名,

例如, iostream.h 變成了iostream。

如果我們使用ANSI-C++ 兼容的包含文件,我們必須記住所有的函數(shù)、類和對象是定義在名空間 std 下面的,例如:

    // ANSI-C++ compliant hello world
            #include <iostream>
            int main () {
            std::cout << "Hello world in ANSI-C++\n";
return 0;
}
Hello world in ANSI-C++

更常用的方法是使用using namespace ,這樣我們就不必在所有標(biāo)準(zhǔn)空間中定義的函數(shù)或?qū)ο笄懊婵偸鞘褂梅秶僮鞣?:了 :

    // ANSI-C++ compliant hello world (II)
            #include <iostream>
            using namespace std;
            int main () {
            cout << "Hello world in ANSI-C++\n";
            return 0;
            }
            
Hello world in ANSI-C++

對于STL 用戶,強(qiáng)烈建議使用ANSI-compliant 方式來包含標(biāo)準(zhǔn)函數(shù)庫。

posted @ 2008-12-08 12:33 henry08 閱讀(394) | 評論 (0)編輯 收藏

模板與多文件工程

template <class T> // 最常用的:一個class 參數(shù)。

template <class T, class U> // 兩個class 參數(shù)。

template <class T, int N> // 一個class 和一個整數(shù)。

template <class T = char> // 有一個默認(rèn)值。

template <int Tfunc (int)> // 參數(shù)為一個函數(shù)。

從編譯器的角度來看,模板不同于一般的函數(shù)或類。
它們在需要時才被編譯(compiled on demand),
也就是說一個模板的代碼直到需要生成一個對象的時候(instantiation)才被編譯。
當(dāng)需要instantiation的時候,編譯器根據(jù)模板為特定的調(diào)用數(shù)據(jù)類型生成一個特殊的函數(shù)。


當(dāng)工程變得越來越大的時候,程序代碼通常會被分割為多個源程序文件。
在這種情況下,通常接口(interface)和實現(xiàn)(implementation)是分開的。


用一個函數(shù)庫做例子
     接口通常包括所有能被調(diào)用的函數(shù)的原型定義。
                                    它們通常被定義在以.h 為擴(kuò)展名的頭文件 (header file) 中;
      而實現(xiàn) (函數(shù)的定義) 
                                    則在獨立的C++代碼文件中。


模板這種類似宏(macro-like) 的功能,對多文件工程有一定的限制:
函數(shù)或類模板的實現(xiàn) (定義) 必須與原型聲明在同一個文件中。
也就是說我們不能再 將接口(interface)存儲在單獨的頭文件中,
而必須將接口和實現(xiàn)放在使用模板的同一個文件中。

回到函數(shù)庫的例子,如果我們想要建立一個函數(shù)模板的庫,我們不能再使用頭文件(.h) ,取而代之,我們應(yīng)該生成一個模板文件(template file),將函數(shù)模板的接口和實現(xiàn) 都放在這個文件中 (這種文件沒有慣用擴(kuò)展名,除了不要使用.h擴(kuò)展名或不要不加任何擴(kuò)展名)。


在一個工程中多次包含同時具有聲明和實現(xiàn)的模板文件并不會產(chǎn)生鏈接錯誤 (linkage errors),因為它們只有在需要時才被編譯,而兼容模板的編譯器應(yīng)該已經(jīng)考慮到這種情況,不會生成重復(fù)的代碼。

posted @ 2008-12-08 12:03 henry08 閱讀(489) | 評論 (0)編輯 收藏

靜態(tài)成員(Static members)

靜態(tài)成員與全域變量(global variable)具有相同的屬性,但它享有類(class)的范圍




C++ 標(biāo)準(zhǔn),為了避免它們被多次重復(fù)聲明,
在class的聲明中只能夠包括static member的原型(聲明),
而不能夠包括其定義(初始化操作)。
為了初始化一個靜態(tài)數(shù)據(jù)成員,
我們必須在class之外(在全域范圍內(nèi)),
包括一個正式的定義,就像上面例子中做法一樣。





在提醒一次,它其實是一個全域變量。唯一的不同是它的名字跟在class的后面。

就像我們會在class中包含static數(shù)據(jù)一樣,我們也可以使它包含static 函數(shù)。
它們表示相同的含義:static函數(shù)是全域函數(shù)(global functions),但是像一個指定class的對象成員一樣被調(diào)用。
它們只能夠引用static 數(shù)據(jù),永遠(yuǎn)不能引用class的非靜態(tài)(nonstatic)成員。
它們也不能夠使用關(guān)鍵字this,因為this實際引用了一個對象指針,
但這些 static函數(shù)卻不是任何object的成員,而是class的直接成員。

posted @ 2008-12-04 18:34 henry08 閱讀(367) | 評論 (0)編輯 收藏

定義一個class而沒有明確定義構(gòu)造函數(shù)的時候,編譯器會自動假設(shè)兩個重載的構(gòu)造函數(shù)

實際上,當(dāng)我們定義一個class而沒有明確定義構(gòu)造函數(shù)的時候,


編譯器會自動假設(shè)兩個重載的構(gòu)造函數(shù)
 (默認(rèn)構(gòu)造函數(shù)"default constructor" 和復(fù)制構(gòu)造函數(shù)"copy constructor")。


例如,對以下class:

   class CExample {
public:
int a,b,c;
void multiply (int n, int m) { a=n; b=m; c=a*b; };
};

沒有定義構(gòu)造函數(shù),


編譯器自動假設(shè)它有以下constructor 成員函數(shù):

  • Empty constructor

    它是一個沒有任何參數(shù)的構(gòu)造函數(shù),被定義為nop (沒有語句)。它什么都不做。

    CExample::CExample () { };
  • Copy constructor

    它是一個只有一個參數(shù)的構(gòu)造函數(shù),該參數(shù)是這個class的一個對象,這個函數(shù)的功能是將被傳入的對象(object)的所有非靜態(tài)(non-static)成員變量的值都復(fù)制給自身這個object。

       CExample::CExample (const CExample& rv) {
    a=rv.a; b=rv.b; c=rv.c;
    }

必須注意:這兩個默認(rèn)構(gòu)造函數(shù)(empty construction 和 copy constructor )

只有在沒有其它構(gòu)造函數(shù)被明確定義的情況下才存在。

如果任何其它有任意參數(shù)的構(gòu)造函數(shù)被定義了,這兩個構(gòu)造函數(shù)就都不存在了。

在這種情況下,

如果你想要有empty construction 和 copy constructor ,

就必需要自己定義它們。

posted @ 2008-12-04 18:04 henry08 閱讀(2122) | 評論 (5)編輯 收藏

C在struct里面可以用public、private,默認(rèn)的是public,而C++默認(rèn)是private。

C在struct里面可以用public、private,默認(rèn)的是public,而C++默認(rèn)是private。

C在struct里面可以用public、private,默認(rèn)的是public,而C++默認(rèn)是private。

posted @ 2008-12-04 18:01 henry08 閱讀(2793) | 評論 (1)編輯 收藏

研究幾個C/C++編譯器

今天在這里看一個程序,做了一點修改,拿Dev-C++編譯了一下,運行通過,只是有幾個Warning。文章作者說他是用LCC-Win32編譯的,上網(wǎng)查了一下,LCC-Win32現(xiàn)在已經(jīng)收費了,只在天空下載到一個LCC-Win32 V3.0。LCC-Win32是個C語言編譯器,編譯出來的程序只有14K,比起Dev-C++的460K來真是小太多了。一直很疑惑Dev-C++編譯出來的可執(zhí)行文件怎么那么大,難道GCC在Windows下只能編譯得那么大?還是我沒有配置好?

在網(wǎng)上搜了一下其他Windows下的C++編譯器,看到這篇《微軟的免費 C++ 編譯器》,提到了微軟的Visual C++ Toolkit 2003。這套軟件是免費的,但是小氣的微軟已經(jīng)不再提供下載了。上網(wǎng)搜了一下,找到了微軟網(wǎng)站的VCToolkitSetup.exe文件下載鏈接,當(dāng)然這個鏈接已經(jīng)不能用了,我直接扔到迅雷里下載,迅雷幫忙找到了兩個下載地址:地址一,地址二。下載下來查看了一下MD5,90D8B963CA196AA9855B2CA6C3174C14,沒問題。

文章中說這個VC 7.1可以用來編譯python和Firefox,不過我安裝的時候安裝程序自動重啟了我的系統(tǒng),555,今天不研究了,逃。

Update:好像C++程序開頭加了#include <iostream>的話,生成的exe文件大小就會從20k左右上升到三、四百k。iostream不能不用啊,傷腦筋啊。另外,把編譯器選項里的連接器->剝除附加信息設(shè)成yes,可以有效的縮小編譯的程序的大小,大概可以從400多k縮小的200多k。
http://yskin.net/2006/10/cpp-compiler.html

posted @ 2008-12-03 13:50 henry08 閱讀(7010) | 評論 (16)編輯 收藏

算法

void main()
{
    long a1 = 34, a2 = 23, a3 = 12;
    if( a1 > a2 )
    {
        long temp = a1;
        a1 = a2;
        a2 = temp;
    }
    if( a1 > a3 )
    {
        long temp = a1;
        a1 = a3;
        a3 = temp;
    }
    if( a2 > a3 )
    {
        long temp = a2;
        a2 = a3;
        a3 = temp;
    }
}
上面就在每個if后面的復(fù)合語句中定義了一個臨時變量temp以借助編譯器的靜態(tài)分配內(nèi)存功能來提供臨時存放卡片的內(nèi)存。上面的元素交換并沒有按照前面所說映射成函數(shù),是因為在這里其只有三條語句且容易理解。如果要將交換操作定義為一函數(shù)
如果要將交換操作定義為一函數(shù),則應(yīng)如下:
void Swap( long *p1, long *p2 )             void Swap( long &r1, long &r2 )
{                                           {
    long temp = *p1;                            long temp = r1;
    *p1 = *p2;                                  r1 = r2;
    *p2 = temp;                                 r2 = temp;
}                                           }
void main()                                 void main()
{                                           {
    long a1 = 34, a2 = 23, a3 = 12;             long a1 = 34, a2 = 23, a3 = 12;
    if( a1 > a2 )                               if( a1 > a2 )
        Swap( &a1, &a2 );                           Swap( a1, a2 );
    if( a1 > a3 )                               if( a1 > a3 )
        Swap( &a1, &a3 );                           Swap( a1, a3 );
    if( a2 > a3 )                               if( a2 > a3 )
        Swap( &a2, &a3 );                           Swap( a2, a3 );
}                                           }
    先看左側(cè)的程序。上面定義了函數(shù)來表示給定盒子之間的交換操作,注意參數(shù)類型使用了long*,這里指針表示引用(應(yīng)注意指針不僅可以表示引用,還可有其它的語義,以后會提到)。



下面看右側(cè)的程序。參數(shù)類型變成long&,和指針一樣,依舊表示引用,但注意它們的不同。后者表示它是一個別名,即它是一個映射,映射的地址是記錄作為參數(shù)的數(shù)字的地址,也就是說它要求調(diào)用此函數(shù)時,給出的作為參數(shù)的數(shù)字一定是有地址的數(shù)字

posted @ 2008-11-27 16:31 henry08 閱讀(276) | 評論 (0)編輯 收藏

函數(shù)

上面的返回類型為void,前面提過,void是C++提供的一種特殊數(shù)字類型,其僅僅只是為了保障語法的嚴(yán)密性而已,即任何函數(shù)執(zhí)行后都要返回一個數(shù)字(后面將說明),而對于不用返回數(shù)字的函數(shù),則可以定義返回類型為void,這樣就可以保證語法的嚴(yán)密性。

可以認(rèn)為函數(shù)類型的地址類型的數(shù)字編譯器會隱式轉(zhuǎn)換成指針類型的數(shù)字


重載函數(shù)表示函數(shù)名字一樣,但參數(shù)類型及個數(shù)不同的多個函數(shù)

 聲明是告訴編譯器一些信息,以協(xié)助編譯器進(jìn)行語法分析,避免編譯器報錯。而定義是告訴編譯器生成一些代碼,并且這些代碼將由連接器使用。

extern long a, *pA, &ra;
    上面就聲明(不是定義)了三個變量a、pA和ra。
因為extern表示外部的意思,因此上面就被認(rèn)為是告訴編譯器有三個外部的變量,為a、pA和ra,故被認(rèn)為是聲明語句,所以上面將不分配任何內(nèi)存。
同樣,對于函數(shù),它也是一樣的:
    extern void ABC( long );  或  extern long AB( short b );

posted @ 2008-11-26 23:46 henry08 閱讀(203) | 評論 (0)編輯 收藏

類型修飾符(type-specifier)

數(shù)組和指針都是類型修飾符,之前提過的引用變量的“&”也是類型修飾符

指針修飾符“*”——其總是接在變量名的前面,表示當(dāng)前類型為原類型的指針。故:
short a = 10, *pA = &a, **ppA = &pA;

 引用修飾符“&”——其總是接在變量名的前面,表示此變量不用分配內(nèi)存以和其綁定,而在說明類型時,則不能有它,下面說明。由于表示相應(yīng)變量不用分配內(nèi)存以生成映射,故其不像上述兩種類型修飾符,可以多次重復(fù)書寫,因為沒有意義

posted @ 2008-11-26 15:52 henry08 閱讀(683) | 評論 (0)編輯 收藏

僅列出標(biāo)題
共3頁: 1 2 3 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲国产欧美在线| 欧美日韩一级黄| 久久婷婷久久一区二区三区| 亚洲欧美成人一区二区在线电影| 亚洲人成网站精品片在线观看 | 久久免费偷拍视频| 欧美一区三区三区高中清蜜桃| 校园激情久久| 欧美中在线观看| 久久嫩草精品久久久久| 欧美69视频| 国产精品r级在线| 国产伦精品一区二区三区免费| 国产午夜久久久久| 亚洲激情一区二区| 午夜国产一区| 欧美国产视频日韩| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美精品一区在线发布| 欧美日韩国产电影| 国产欧美精品日韩区二区麻豆天美| 国产一区二区中文| 亚洲精品久久7777| 欧美一级在线亚洲天堂| 美女诱惑一区| 亚洲午夜视频在线观看| 农村妇女精品| 国产日韩一区在线| 夜夜嗨av色综合久久久综合网| 性色av一区二区三区红粉影视| 久久亚洲高清| 亚洲一二三四区| 欧美刺激性大交免费视频| 国产精品视频yy9099| 亚洲电影在线免费观看| 午夜精品一区二区三区在线播放| 欧美成人午夜影院| 欧美亚洲视频| 欧美精品粉嫩高潮一区二区 | 久久综合网hezyo| 一区二区三区国产盗摄| 麻豆9191精品国产| 国产综合精品| 午夜在线视频观看日韩17c| 亚洲国产精品精华液2区45| 欧美亚洲专区| 国产精品丝袜91| 一区二区三区色| 亚洲高清色综合| 久久久精品动漫| 国产精品一区二区黑丝| 亚洲图片欧洲图片日韩av| 欧美风情在线| 久久久久久久尹人综合网亚洲| 国产欧美91| 亚洲欧美在线一区| 在线一区日本视频| 欧美午夜不卡影院在线观看完整版免费 | 国内精品美女av在线播放| 亚洲欧美日韩在线| 亚洲视频在线观看| 国产精品伦一区| 性欧美超级视频| 亚洲免费在线播放| 国产亚洲视频在线观看| 欧美一区二区三区四区在线 | 一本久久a久久免费精品不卡| 亚洲国产99精品国自产| 久久久人成影片一区二区三区观看 | 久久国产黑丝| 久久不见久久见免费视频1| 国产手机视频精品| 久久精品99久久香蕉国产色戒| 亚洲图中文字幕| 国产日韩欧美二区| 久久综合电影一区| 免费在线欧美视频| 亚洲视频综合在线| 午夜精品久久久| 一区二区三区在线视频免费观看| 久久一二三四| 女仆av观看一区| 亚洲欧美成人网| 久久久精品五月天| 一本色道久久综合亚洲精品高清 | 国产精品久久久久三级| 久久av一区二区| 卡通动漫国产精品| 中文av一区特黄| 午夜精品视频在线观看| 在线观看视频一区二区| 日韩视频久久| 国产一区美女| 亚洲精品欧美在线| 国产一区二区欧美| 亚洲激情一区| 国产亚洲精品久| 亚洲黄色毛片| 国产亚洲一区在线| 亚洲六月丁香色婷婷综合久久| 国产欧美精品在线| 欧美激情第8页| 国产精品永久入口久久久| 欧美刺激午夜性久久久久久久| 欧美三区在线视频| 欧美成人福利视频| 国产精品一页| 亚洲毛片一区| 亚洲国产精品t66y| 亚洲欧美影音先锋| 中文亚洲视频在线| 蜜臀a∨国产成人精品| 欧美怡红院视频一区二区三区| 久久综合色婷婷| 久久久久久久久久看片| 欧美深夜影院| 亚洲高清视频一区二区| 国产一区二区视频在线观看| 99国产精品私拍| 欧美高清视频在线播放| 久久久久综合网| 国产精品国产福利国产秒拍| 亚洲国产高清高潮精品美女| 狠狠干成人综合网| 亚洲欧美在线免费观看| 欧美另类女人| 亚洲大片av| 亚洲韩国精品一区| 午夜精品影院| 亚洲精选视频在线| 黑人巨大精品欧美黑白配亚洲 | 女女同性精品视频| 免费成人性网站| 激情六月婷婷综合| 欧美一区二区三区视频免费| 午夜性色一区二区三区免费视频| 欧美日韩精品欧美日韩精品| 亚洲高清资源| avtt综合网| 欧美日韩理论| 亚洲另类在线视频| 亚洲免费网站| 国产日产欧美精品| 久久免费视频一区| 欧美日韩国产一级| 亚洲第一综合天堂另类专| 国内精品久久久久久久影视麻豆| 亚洲视频一二三| 亚洲综合日韩| 国产精品在线看| 性色一区二区三区| 久久久午夜电影| 亚洲国产高清aⅴ视频| 久久综合狠狠综合久久综青草| 另类综合日韩欧美亚洲| 在线日本成人| 欧美 亚欧 日韩视频在线| 亚洲激情国产精品| 亚洲一区久久久| 国产农村妇女毛片精品久久莱园子 | 亚洲视频一区二区免费在线观看| 欧美国产日韩亚洲一区| 亚洲国产婷婷综合在线精品| 91久久夜色精品国产网站| 欧美人在线观看| 亚洲一区二区av电影| 欧美一区二区视频在线观看| 国产综合久久久久久| 欧美激情按摩在线| 亚洲精品久久7777| 国产精品久久久久久久久动漫| 狂野欧美激情性xxxx| 亚洲国产精品一区二区www在线| 欧美一区二区精品在线| 久久国产手机看片| 1024国产精品| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲国产专区校园欧美| 亚洲伊人久久综合| 国产在线一区二区三区四区| 媚黑女一区二区| 亚洲永久免费观看| 免费毛片一区二区三区久久久| 亚洲国产精品久久久久秋霞不卡| 久久精品91| 中文在线一区| 欧美成人免费观看| 欧美主播一区二区三区| 亚洲伦理一区| 极品少妇一区二区三区| 国产欧美日韩亚洲精品| 国产精品v欧美精品∨日韩| 亚洲欧美日韩国产综合在线| 久久综合给合久久狠狠狠97色69| 亚洲日本va午夜在线电影| 国产精品乱看| 欧美日韩中文字幕在线| 免费av成人在线| 久久国产加勒比精品无码| 正在播放亚洲|