• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于顯示管理重載集的C++靜態(tài)分派研究

    2015-10-20 11:26唐新國周天宏
    關(guān)鍵詞:調(diào)用靜態(tài)模板

    唐新國 周天宏

    摘要在C++系統(tǒng)中有靜態(tài)分派編程技術(shù)和動態(tài)分派編程技術(shù),將一些執(zhí)行期的分派提前至編譯期,可以減少了編譯后的代碼長度也提高了程序總體運行速度.分析了引入靜態(tài)分派技術(shù)的必要性以及常用的靜態(tài)分派技術(shù),提出了通過使用Boost庫中的enable_if模板族來非侵入地(nonintrusively)顯示管理模板函數(shù)的重載集的方式來實現(xiàn)C++中靜態(tài)分派編程技術(shù),不但提出了一種新的靜態(tài)分派思路,更為重要的是通過這種方式可以根據(jù)模板函數(shù)的返回值來重載模板函數(shù).

    關(guān)鍵詞靜態(tài)分派動態(tài)分派模板元編程模板特化

    中圖分類號TP311文獻(xiàn)標(biāo)識碼A文章編號10002537(2015)05007006

    A Static Dispatching Technique in C++ with

    Explicitly Managing the Overload Set

    TANG Xinguo1*, ZHOU Tianhong2

    (1.Information Technology School, Hubei Polytechnic Institute, Xiaogan 432100, China;

    2.Department of Information Engineering, Wuhan Business University, Wuhan 430056, China)

    AbstractIn C++, there exists static dispatching technique and dynamic dispatching technique. Moving some dispatching at run time up to compiling time can reduce length of complied code and improve the overall running speed. The necessity of introducing static dispatching technique and those used commonly was analyzed, and then a way to realize static dispatching technique was presented by using enable_if template group in Boost library nonintrusively explicitly to manage the overloaded set of template functions. More importantly, in this way, one could overload template functions by their return values.

    Key wordsstatic dispatching; dynamic dispatching; metaprogramming; template specialization

    模板元編程(Metaprogramming)指的是高階編程[1],它運行在編譯期.作為一種高階C++編程技術(shù),C++強(qiáng)大的模板機(jī)制賦予了模板在編譯期的運算能力,模板元編程突出了編譯期在整個程序構(gòu)建和運行過程中的地位,努力將計算從運行期提前至編譯期,它既能有效地防止程序錯誤被傳播到運行期,又能夠?qū)崿F(xiàn)以靜態(tài)代碼控制動態(tài)代碼的目標(biāo),使計算盡可能完成于編譯期的同時也提高了最終程序的運行性能.

    MPL[1](MetaProgramming Library)是由David Abrahams和Aleksey Gurtovoy為方便模板元編程而開發(fā)的庫,2003年被Boost吸納為其中的一員,此后又歷經(jīng)一些重大修改,目前已經(jīng)相當(dāng)完善.MPL的出現(xiàn)是C++模板元編程發(fā)展中的一大創(chuàng)舉,它提供了一個通用、高層次的編程框架,包括了序列、迭代器、算法、元函數(shù)等組件,具有高度的可重用性,提高了模板元編程的效率,使模板元編程的應(yīng)用范圍得到相當(dāng)?shù)臄U(kuò)展.

    C++模板元編程誕生于十多年前,最初的研究方向是編譯期數(shù)值計算,后來的實踐發(fā)展證明,此項技術(shù)在類型計算領(lǐng)域也可以釋放出巨大能量.現(xiàn)在模板元編程主要用于:數(shù)據(jù)計算、解開循環(huán)、類型處理和自動代碼生成.

    模板元編程技術(shù)有兩個強(qiáng)大的優(yōu)勢.首先它使得用其他方法很難或不可能的事情變得容易.第二因為 template metaprograms(模板元程序)在 C++ 編譯期間執(zhí)行,它們能將工作從運行時轉(zhuǎn)移到編譯時.一個結(jié)果就是通常在運行時才能被察覺的錯誤能夠在編譯期間被發(fā)現(xiàn).另一個結(jié)果是 C++ 程序使得 TMP 的使用在以下每一個方面都能更有效率:更小的可執(zhí)行代碼,更短的運行時間,更少的內(nèi)存需求.

    靜態(tài)分派技術(shù)就是通過一些基于編譯期計算出來的結(jié)果來選擇不同的運行期行為或接口的程序設(shè)計方式,該技術(shù)能將一些執(zhí)行期的分派提前至編譯期,從而減少了編譯后的代碼長度,也提高了程序總體運行速度.在C++的著名Loki庫中是通過一種將“數(shù)值轉(zhuǎn)換成型別”(Int2Type)[2]的技術(shù)來實現(xiàn)的.當(dāng)然在C++中實現(xiàn)靜態(tài)分派技術(shù)的方法很多,如:模板函數(shù)的重載、類模板特化等等,本文是通過使用Boost庫中的enable_if模板族來非侵入地(nonintrusively)顯示管理模板函數(shù)的重載集的方式來實現(xiàn)C++中靜態(tài)分派技術(shù),不但提出了一種新的靜態(tài)分派思路,更為重要的是通過這種方式可以根據(jù)模板函數(shù)的返回值來重載模板函數(shù).

    湖南師范大學(xué)自然科學(xué)學(xué)報第38卷第5期唐新國等:基于顯示管理重載集的C++靜態(tài)分派研究1C++的靜態(tài)分派

    1.1C++的靜態(tài)分派的介紹

    在C++中可以通過一些基于編譯期計算出來的結(jié)果來選擇不同的運行期行為或接口的程序設(shè)計方式稱為靜態(tài)分派(static dispatching).事實上在C++程序設(shè)計中經(jīng)常使用的是執(zhí)行期進(jìn)行分派(dispatching),執(zhí)行期進(jìn)行分派通常是使用ifelse或switch語句來實現(xiàn)的.大部分情況下其執(zhí)行期的成本是微不足道的,然而有時還是無法常常這么做,因為ifelse或switch語句要求每一個語句分支都要能夠得到編譯成功,即使該條件在編譯期就知道了.

    例如設(shè)計一個泛型容器NiftyContainer,它將元素類型參數(shù)化[2]:

    template〈class T〉

    class NiftyContainer{};

    由于NiftyContainer是泛型容器,那么它即可以包括類型為T的對象引用,也可以包括指向類型為T的對象指針.如果要復(fù)制泛型容器NiftyContainer中的某個元素,可以調(diào)用其copy構(gòu)造函數(shù)(針對nonpolymorphic類型)或調(diào)用其虛函數(shù)Clone()(針對polymorphic類型).具體設(shè)計如下:

    template〈class T,bool isPolymorphic〉

    class NiftyContainer{

    void DoSomething(){

    T*pSomeObj=…;

    if(isPolymorphic){

    T* pNewObj=pSomeObj〉Clone();

    …polymorphic algorithm…(多態(tài)算法)

    }else{

    T* pNewObj=new T(*pSomeObj);//調(diào)用copy構(gòu)造函數(shù)

    …nonpolymorphic algorithm…(非多態(tài)算法)

    }

    }

    };

    上述算法表面上看沒有問題,但實際上任何一款C++編譯器都不會使之僥幸編譯通過.因為編譯器會編譯每一個語句分支,如果多態(tài)算法使用pSomeObj〉Clone(),那么對任何一個沒有定義成員函數(shù)Clone()的類型,編譯器都會停留在語句pSomeObj〉Clone()處告之編譯通不過.當(dāng)然對nonpolymorphic類型也有可能編譯失敗,因為有些類型會將copy構(gòu)造函數(shù)置于private區(qū)域.

    1.2C++的靜態(tài)分派的設(shè)計方式

    在上面的執(zhí)行期分派算法中,如果可以讓編譯器不編譯那個不可能被執(zhí)行的代碼段為好,例如可以將運行期測試換成相應(yīng)的編譯期測試,C++中靜態(tài)分派的設(shè)計方式通常是[3]:

    template 〈class T〉

    void f(T x){

    if(boost::is_class〈T〉::value){

    …implementation 1…

    }else{

    …implementation 2…

    }

    }

    由于測試條件boost::is_class〈T〉::value可以完全地在編譯期決定,所以很多C++編譯器會對測試條件boost::is_class〈T〉::value進(jìn)行優(yōu)化,并僅為選擇了的if語句分支生成代碼.這種方式簡單清晰,只要它能工作,其概念上的開銷就非常小甚至沒有,實際上這種靜態(tài)分派的設(shè)計方法也并非普遍適應(yīng).

    1.3C++靜態(tài)分派的不足

    考慮上面的函數(shù)模板被實現(xiàn)為下面的樣子時會發(fā)生什么[4]:

    template 〈class T〉

    void f(T x){

    if(boost::is_class〈T〉::value){

    std::cout〈〈x::value;//處理整型常量外覆器

    }else{

    std::cout〈〈x; //處理非整型常量外覆器

    }

    }

    這里的意圖是使函數(shù)模板f能夠輸出一個整數(shù)類型(如int)的值或者一個整型常量外覆器(如long_〈5〉)的值.然而函數(shù)調(diào)用f(42)就會得到一個編譯錯誤,問題仍然與執(zhí)行期進(jìn)行分派一樣,在于整個函數(shù)都需要進(jìn)行類型檢查,包括if語句的全部分支,但我們無法訪問整數(shù)類型int的根本不存在的::value成員,這同樣也出現(xiàn)了運行期分派的缺點.

    采用模板函數(shù)的重載[11]、類模板特化[12]等方法可解決上述問題,關(guān)鍵是將每一個分支單獨寫成一個獨立的代碼段.采用顯示管理重載集的方法來解決C++的靜態(tài)分派問題.

    2基于顯式管理重載集對C++靜態(tài)分派設(shè)計方式的改進(jìn)

    2.1顯示管理重載集的原理

    在C++中,常常使用CRTP[13](奇特的遞歸模板模式)來識別管理重載集,但有時CRTP對于限制一般化的函數(shù)模板實參的范圍是很不夠的.比如我們可能希望通過函數(shù)模板操作內(nèi)建類型(它們沒有基類)或者操作已有的第三方類型(不能修改它們).這時就可以使用Boost庫中的enable_if模板族[14]來非侵入地(nonintrusively)顯示管理模板函數(shù)的重載集,在編譯期決定一個參數(shù)類型的適當(dāng)性.

    Boost庫中的enable_if模板族的工作原理為:

    template〈bool,class T=void〉

    struct enable_if_c

    {

    typedef T type;

    };

    template〈class T〉

    struct enable_if_c〈false,T〉

    {};

    template〈class Cond,class T=void〉

    struct enable_if

    :enable_if_c〈Cond::value,T〉

    {};

    注意:當(dāng)C的值為false時,enable_if_c〈C,T〉::type不存在,根據(jù)C++標(biāo)準(zhǔn)的重載決議規(guī)則,當(dāng)一個函數(shù)模板的實參推導(dǎo)失敗時,它對被考慮準(zhǔn)備調(diào)用的候選函數(shù)集沒有貢獻(xiàn),并且不會導(dǎo)致一個錯誤.這個原則已經(jīng)被David Vandevoorde和Nicolai Josuttis賦予“替換失敗并非錯誤(Substitution Failure Not An Error,SFINAE)”的名號[15].

    2.2C++靜態(tài)分派設(shè)計方式的改進(jìn)

    重載集有時也能進(jìn)行靜態(tài)分派,如果能在編譯期就能決定一個參數(shù)類型的適當(dāng)性,則可用Boost的enable_if模板非侵入地(nonintrusively)顯式管理重載集,從而達(dá)到靜態(tài)分派的目的.用C++的顯示管理重載集方式來實現(xiàn)靜態(tài)分派問題.首先對模板函數(shù)

    template 〈class T〉

    void f(T x){

    if(boost::is_class〈T〉::value){

    std::cout〈〈x::value;//處理整型常量外覆器

    }else{

    std::cout〈〈x; //處理非整型常量外覆器

    }

    }

    進(jìn)行改進(jìn).重新設(shè)計后的代碼為:

    template〈class T〉

    typename boost::enable_if〈

    typename boost::is_class〈T〉::type

    〉::type

    print(T x){

    std::cout〈〈T::value〈〈std::endl;

    }

    template〈class T〉

    typename boost::enable_if〈

    typename mpl::not_〈boost::is_class〈T〉 〉::type

    〉::type

    print(T x){

    std::cout〈〈x〈〈std::endl;

    }

    這樣print(42)和print(mpl::int_〈56〉())將訪問不同的模板函數(shù),只有匹配的那個模板函數(shù)才能實例化且不會出現(xiàn)編譯錯誤.

    其次應(yīng)用C++的顯示管理重載集方式來重新實現(xiàn)C++標(biāo)準(zhǔn)程序庫中的advance泛型算法.advance泛型算法[5]就是一個使用標(biāo)簽分派的極好例子,advance用來將一個迭代器i移動n個位置,對不同類型的迭代器i實現(xiàn)的策略是不同的.如果i是隨機(jī)迭代器,則可用i+=n來實現(xiàn).如果i是雙向迭代器,可以在運行期決定是否遞增或遞減迭代器;如果i是前向迭代器,則只能是向前步進(jìn)多步.通過編譯期的標(biāo)簽分派也可能達(dá)到靜態(tài)分派,它的基本思想是從運行期的泛型編程借用而來.一個標(biāo)簽(tag)僅僅是一個空類[6](empty class),其唯一的用途就是在編譯期傳達(dá)信息.那么改進(jìn)后的代碼為:

    template〈class Iterator,class Distance〉

    typename boost::enable_if〈

    typename boost::is_same〈std::input_iterator_tag,//i是前向迭代器

    typename std::iterator_traits〈Iterator〉::iterator_category〉::type

    〉::type

    advance(Iterator& i,Distance n){

    while(n--)++i;

    }

    template〈class Iterator,class Distance〉

    typename boost::enable_if〈

    typename boost::is_same〈std::bidirectional_iterator_tag,// i是雙向迭代器

    typename std::iterator_traits〈Iterator〉::iterator_category〉::type

    〉::type

    advance(Iterator& i,Distance n){

    if(n〉=0)

    while(n--)++i;

    else

    while(n++)--i;

    }

    template〈class Iterator,class Distance〉

    typename boost::enable_if〈

    typename boost::is_same〈std::random_access_iterator_tag,// i是隨機(jī)迭代器

    typename std::iterator_traits〈Iterator〉::iterator_category〉::type

    〉::type

    advance(Iterator& i,Distance n){

    i+=n;

    }

    對于::advance(i,4)調(diào)用,同樣會根據(jù)迭代器i的類型來選擇一個合適的模板函數(shù),達(dá)到迭代器i的遞增,其他可能使用一個給定的迭代器所未實現(xiàn)的重載則永遠(yuǎn)不會被實例化.從以上實例過程來看:通過C++的顯示管理重載集方式來實現(xiàn)靜態(tài)分派問題就是將每一個可能的分支轉(zhuǎn)換成一個重載的模板函數(shù).

    2.3應(yīng)用拓展

    利用Boost庫中的enable_if模板族來非侵入地(nonintrusively)顯示管理模板函數(shù)的重載集實現(xiàn)C++的靜態(tài)分派問題時,同時也是根據(jù)模板函數(shù)的返回值來實現(xiàn)模板函數(shù)重載的過程.

    下面的函數(shù)模板僅應(yīng)用于算術(shù)類型的迭代器上并將容器中所有元素之和求出,通過元函數(shù)[7]boost::iterator_value來獲取一個迭代器的value_type.

    template〈class Iterator〉

    typename boost::enable_if〈

    boost::is_arithmetic〈//啟用條件

    typename boost::iterator_value〈Iterator〉::type

    ,typename

    boost::iterator_value〈Iterator〉::type//返回類型

    〉::type

    sum(Iterator start,Iterator end){

    typename boost::iterator_value〈Iterator〉::type x(0);

    for(;start!=end;++start)

    x+=*start;

    return x;

    }

    如果啟用條件C的::value為true,enable_if〈C,T〉::type將為T,于是sum將返回一個“Iterator的value_type”的對象.否則sum將從重載決議過程中消失[8].

    當(dāng)有模板函數(shù)重載發(fā)揮作用時,這項技術(shù)就變得真正有趣起來.因為上述模板sum已經(jīng)根據(jù)它返回值被限制為(接收)適當(dāng)?shù)膮?shù),現(xiàn)在可以添加另一個重載,它允許我們計算出vector〈vector〈int〉〉的所有算術(shù)元素,以及其他算術(shù)類型的嵌套的容器.

    template〈class Iterator〉

    struct inner_value

    :boost::iterator_value〈

    typename boost::iterator_value〈Iterator〉::type::iterator

    〉{};

    template〈class Iterator〉

    typename boost::lazy_disable_if〈

    boost::is_arithmetic〈//禁用條件

    typename boost::iterator_value〈Iterator〉::type

    ,inner_value〈Iterator〉//結(jié)果無函數(shù)

    〉::type

    sum(Iterator start,Iterator end){

    typename inner_value〈Iterator〉::type x(0);

    for(;start!=end;++start)

    x+=sum(start〉begin(),start〉end());

    return x;

    }

    Lazy_disable_if的“disable”指出當(dāng)條件被滿足時,該函數(shù)被從重載集中移走了,“l(fā)azy”則意味著函數(shù)的結(jié)果::type是以一個無參元函數(shù)調(diào)用第二個參數(shù)的結(jié)果[9].

    注意,只有當(dāng)?shù)鞯闹殿愋褪橇硪粋€迭代器時,inner_value〈Iterator〉才能被調(diào)用,這時sum(Iterator start,Iterator end)會調(diào)用第二個模板函數(shù).當(dāng)?shù)鞯闹殿愋褪撬阈g(shù)類型時,sum(Iterator start,Iterator end)會調(diào)用第一個模板函數(shù).對于其他類型的實參,當(dāng)發(fā)生實參推導(dǎo)失敗時,那么在重載決議期間它對考慮準(zhǔn)備調(diào)用的候選函數(shù)集沒有貢獻(xiàn)[10],這時并不會發(fā)生錯誤,這個過程當(dāng)然也可以看成是根據(jù)模板函數(shù)的返回值來實現(xiàn)模板函數(shù)重載的過程.

    3結(jié)束語

    模板元編程是C++中一種高級編程技術(shù),它處于編譯期,靜態(tài)分派技術(shù)是基于編譯期計算出來的結(jié)果來選擇不同的運行期行為或接口的程序設(shè)計方式,這種技術(shù)能將一些執(zhí)行期的分派提前至編譯期,從而減少了編譯后的代碼長度,也提高了程序總體運行速度.這里則是通過使用Boost庫中的enable_if模板族來非侵入地(nonintrusively)顯示管理模板函數(shù)的重載集的方式來實現(xiàn)C++中靜態(tài)分派技術(shù),提出了一種新的靜態(tài)分派思路,通過這種方式可以根據(jù)模板函數(shù)的返回值來重載模板函數(shù).

    參考文獻(xiàn):

    [1]DAVID A.C++模板元編程[M].榮耀,譯.北京:機(jī)械工業(yè)出版社,2010.

    [2]ANDREI A.C++設(shè)計新思維[M].侯捷,於春景,譯.武漢:華中科技大學(xué)出版社,2003.

    [3]DAVID V, NICOLAI M J. C++ template中文版[M].陳偉柱,譯.北京:人民郵電出版社,2004.

    [4]HERBERT S.C++完全參考手冊[M].4版.北京:清華大學(xué)出版社,2007.

    [5]王曉宇,錢紅兵.基于UML類圖和順序圖的C++代碼自動生成方法的研究[J].計算機(jī)應(yīng)用與軟件, 2013,30(1):190195.

    [6]周毅,顧進(jìn)廣,張曉龍,等.一種面向復(fù)合屬性的自適應(yīng)對象模型[J].計算機(jī)應(yīng)用與軟件, 2008,25(11):137139.

    [7]徐靜雯,周繼恩,施躍躍,等.軟件密集型系統(tǒng)的故障診斷技術(shù)研究[J].計算機(jī)應(yīng)用與軟件, 2012,29(2):175178.

    [8]黃山,陳昱松,王建偉,等.一種基于UML與SDL融合建模的組件系統(tǒng)測試方法[J].計算機(jī)應(yīng)用與軟件, 2011,28(7):175177,182.

    [9]唐峰,許第洪.SolidWorks與Pro/Engineer之間圖形數(shù)據(jù)交換方式的研究[J].湖南師范大學(xué)自然科學(xué)學(xué)報, 2011,34(1):3742.

    [10]劉震,繆力.基于動態(tài)調(diào)用圖的Java程序修改影響分析技術(shù)[J].湖南師范大學(xué)自然科學(xué)學(xué)報, 2011,34(6):2630.

    [11]PLAUGER P J, ALEXANDER A S.C++ STL中文版[M].王昕,譯.北京:中國電力出版社,2002.

    [12]JASMIN B, MARK S.C++ GUI Qt 4編程[M].閆鋒欣,譯.北京:電子工業(yè)出版社,2008.

    [13]葉至軍.C++ STL開發(fā)技術(shù)導(dǎo)引[M].北京:人民郵電出版社, 2007.

    [14]MATTHEW H A. 泛型編程與STL[M].侯捷,譯.北京:中國電力出版社,2003.

    [15]ANDREW K, BARBARA M. C++沉思錄[M].黃曉春,譯.北京:人民郵電出版社,2008.

    (編輯陳笑梅)

    猜你喜歡
    調(diào)用靜態(tài)模板
    Inventors and Inventions
    猜猜他是誰
    基于HTML5靜態(tài)網(wǎng)頁設(shè)計
    把握數(shù)學(xué)解題模板,輕松做題一二三
    SOLIDWORKS Electrical清單模板定制方法
    基于Android Broadcast的短信安全監(jiān)聽系統(tǒng)的設(shè)計和實現(xiàn)
    分布式系統(tǒng)負(fù)載均衡關(guān)鍵技術(shù)及其發(fā)展脈絡(luò)
    文檔提效 用好WPS模板
    利用RFC技術(shù)實現(xiàn)SAP系統(tǒng)接口通信
    C++語言中函數(shù)參數(shù)傳遞方式剖析
    女警被强在线播放| 捣出白浆h1v1| 香蕉丝袜av| 69精品国产乱码久久久| www.熟女人妻精品国产| 婷婷色综合www| 超碰97精品在线观看| 欧美变态另类bdsm刘玥| 大话2 男鬼变身卡| 亚洲国产欧美在线一区| 美国免费a级毛片| 男人舔女人的私密视频| 亚洲人成77777在线视频| 亚洲天堂av无毛| 久久午夜综合久久蜜桃| 久久精品久久久久久久性| 成人午夜精彩视频在线观看| 亚洲av欧美aⅴ国产| 国产成人欧美在线观看 | 国产不卡av网站在线观看| 久久久国产精品麻豆| 成人黄色视频免费在线看| 欧美久久黑人一区二区| 亚洲精品成人av观看孕妇| 国产精品香港三级国产av潘金莲 | 亚洲精品一卡2卡三卡4卡5卡 | 欧美黄色片欧美黄色片| 亚洲色图 男人天堂 中文字幕| 国产精品 欧美亚洲| 日韩免费高清中文字幕av| 亚洲图色成人| 国产一区二区三区综合在线观看| 国产极品粉嫩免费观看在线| 亚洲av片天天在线观看| 在线观看人妻少妇| 久久99一区二区三区| 中文字幕色久视频| 欧美日韩精品网址| 亚洲精品一二三| 亚洲激情五月婷婷啪啪| 黑人欧美特级aaaaaa片| 超碰97精品在线观看| 高清视频免费观看一区二区| 婷婷色综合大香蕉| 国产av国产精品国产| 婷婷成人精品国产| 人人妻人人澡人人爽人人夜夜| 欧美日韩福利视频一区二区| 精品久久久精品久久久| 久久国产精品男人的天堂亚洲| 久久人妻福利社区极品人妻图片 | 午夜福利一区二区在线看| 亚洲黑人精品在线| 两个人看的免费小视频| 纯流量卡能插随身wifi吗| 亚洲国产日韩一区二区| 久久精品久久久久久久性| 欧美在线黄色| 交换朋友夫妻互换小说| 丰满迷人的少妇在线观看| 亚洲欧美一区二区三区国产| 80岁老熟妇乱子伦牲交| 国产一区二区三区av在线| 9色porny在线观看| 男人舔女人的私密视频| 深夜精品福利| 90打野战视频偷拍视频| 人成视频在线观看免费观看| 久久99精品国语久久久| 久9热在线精品视频| 久久久久国产一级毛片高清牌| 久久久久精品国产欧美久久久 | 美女大奶头黄色视频| 永久免费av网站大全| 亚洲av国产av综合av卡| 亚洲人成电影免费在线| 777米奇影视久久| 青青草视频在线视频观看| 夜夜骑夜夜射夜夜干| 亚洲熟女毛片儿| 精品人妻1区二区| 成人午夜精彩视频在线观看| 久久精品人人爽人人爽视色| 永久免费av网站大全| 久久久精品国产亚洲av高清涩受| 精品一区在线观看国产| 亚洲精品国产av成人精品| 成年av动漫网址| 午夜福利在线免费观看网站| 最新在线观看一区二区三区 | 97人妻天天添夜夜摸| 亚洲一区中文字幕在线| 99九九在线精品视频| 一二三四在线观看免费中文在| 97在线人人人人妻| 国产一卡二卡三卡精品| 精品人妻在线不人妻| 免费在线观看完整版高清| 91精品三级在线观看| 亚洲av电影在线进入| 精品福利永久在线观看| 人人妻人人澡人人看| 成人三级做爰电影| 国产1区2区3区精品| 国产黄色视频一区二区在线观看| 免费看av在线观看网站| av在线老鸭窝| 亚洲av美国av| 欧美精品一区二区大全| 两人在一起打扑克的视频| 天堂8中文在线网| 成年人午夜在线观看视频| 中文字幕制服av| 亚洲男人天堂网一区| av网站免费在线观看视频| 少妇裸体淫交视频免费看高清 | 亚洲午夜精品一区,二区,三区| 免费日韩欧美在线观看| 最近手机中文字幕大全| 一二三四在线观看免费中文在| 欧美+亚洲+日韩+国产| 国产精品久久久人人做人人爽| 欧美日韩亚洲综合一区二区三区_| 久久久亚洲精品成人影院| 波多野结衣一区麻豆| 亚洲免费av在线视频| 男人操女人黄网站| 高清av免费在线| 久久精品国产综合久久久| 久久久久国产精品人妻一区二区| 在线亚洲精品国产二区图片欧美| 美女中出高潮动态图| 欧美激情极品国产一区二区三区| 国产精品 国内视频| 欧美日韩福利视频一区二区| av天堂久久9| av不卡在线播放| 麻豆乱淫一区二区| 免费少妇av软件| 欧美日韩亚洲综合一区二区三区_| 欧美精品一区二区大全| a级毛片在线看网站| 又大又黄又爽视频免费| 欧美国产精品一级二级三级| 国产精品一区二区在线不卡| 久久青草综合色| 999精品在线视频| 日韩电影二区| 成年人免费黄色播放视频| 男的添女的下面高潮视频| 精品国产一区二区久久| 国产精品一区二区在线不卡| 欧美人与性动交α欧美软件| 亚洲精品中文字幕在线视频| 精品一品国产午夜福利视频| 国产在线免费精品| 国产精品成人在线| 大码成人一级视频| 99九九在线精品视频| 少妇 在线观看| 国产一级毛片在线| 久久亚洲精品不卡| 国产精品九九99| 超色免费av| 91麻豆av在线| 婷婷成人精品国产| avwww免费| 精品国产一区二区三区久久久樱花| 欧美精品一区二区免费开放| 婷婷丁香在线五月| 精品卡一卡二卡四卡免费| 亚洲av综合色区一区| 国产真人三级小视频在线观看| 亚洲,欧美精品.| 亚洲人成77777在线视频| 久久人妻熟女aⅴ| 叶爱在线成人免费视频播放| 久久精品国产亚洲av高清一级| 一区二区三区精品91| av片东京热男人的天堂| 在线观看国产h片| 欧美性长视频在线观看| 黑人巨大精品欧美一区二区蜜桃| 宅男免费午夜| 国产伦人伦偷精品视频| 又大又黄又爽视频免费| 黑人欧美特级aaaaaa片| 亚洲欧美一区二区三区国产| 国产精品麻豆人妻色哟哟久久| 国产亚洲欧美在线一区二区| 国产色视频综合| 中文字幕最新亚洲高清| 无限看片的www在线观看| 亚洲视频免费观看视频| 久久久久视频综合| 伊人久久大香线蕉亚洲五| 国产福利在线免费观看视频| 免费一级毛片在线播放高清视频 | 97精品久久久久久久久久精品| www.av在线官网国产| 亚洲成国产人片在线观看| 丰满饥渴人妻一区二区三| 国产三级黄色录像| 国产精品欧美亚洲77777| 欧美日韩亚洲高清精品| 国产女主播在线喷水免费视频网站| 国产精品一区二区免费欧美 | 男女之事视频高清在线观看 | h视频一区二区三区| av福利片在线| 日韩 亚洲 欧美在线| 国产免费现黄频在线看| 极品人妻少妇av视频| 久久精品国产综合久久久| 国产成人欧美| 欧美黑人精品巨大| 日韩一本色道免费dvd| 欧美大码av| 美女视频免费永久观看网站| 久久天堂一区二区三区四区| 满18在线观看网站| 熟女少妇亚洲综合色aaa.| 9191精品国产免费久久| 亚洲一区中文字幕在线| av在线老鸭窝| 精品久久久久久久毛片微露脸 | 精品久久久久久久毛片微露脸 | 欧美在线一区亚洲| 大码成人一级视频| 热re99久久国产66热| 丝袜在线中文字幕| 亚洲成人国产一区在线观看 | 秋霞在线观看毛片| 亚洲第一青青草原| 18禁裸乳无遮挡动漫免费视频| 久久精品久久久久久久性| 日本a在线网址| 一区二区三区四区激情视频| 91麻豆精品激情在线观看国产 | 欧美精品啪啪一区二区三区 | 纵有疾风起免费观看全集完整版| 日日爽夜夜爽网站| 亚洲成av片中文字幕在线观看| 亚洲国产欧美在线一区| 新久久久久国产一级毛片| 欧美成狂野欧美在线观看| 欧美性长视频在线观看| 天天添夜夜摸| 国精品久久久久久国模美| 两个人免费观看高清视频| 国产成人91sexporn| 啦啦啦啦在线视频资源| 又大又爽又粗| 手机成人av网站| 夫妻性生交免费视频一级片| 久久综合国产亚洲精品| 成人午夜精彩视频在线观看| 国产男人的电影天堂91| 无遮挡黄片免费观看| 欧美xxⅹ黑人| 久久ye,这里只有精品| 无遮挡黄片免费观看| 国产成人精品久久久久久| 亚洲精品国产色婷婷电影| 亚洲国产毛片av蜜桃av| e午夜精品久久久久久久| 婷婷色av中文字幕| 最近最新中文字幕大全免费视频 | 一级片免费观看大全| 咕卡用的链子| 岛国毛片在线播放| 看免费av毛片| 欧美黑人欧美精品刺激| 国产日韩一区二区三区精品不卡| tube8黄色片| 18禁黄网站禁片午夜丰满| 亚洲成人免费电影在线观看 | 亚洲av综合色区一区| 亚洲av欧美aⅴ国产| 黄片播放在线免费| 狂野欧美激情性bbbbbb| 国产精品 欧美亚洲| av国产久精品久网站免费入址| 国产又爽黄色视频| 国产黄色免费在线视频| 精品卡一卡二卡四卡免费| 亚洲人成网站在线观看播放| 观看av在线不卡| 久久国产亚洲av麻豆专区| 极品少妇高潮喷水抽搐| 性色av乱码一区二区三区2| 亚洲综合色网址| 亚洲五月色婷婷综合| 国产一区二区三区综合在线观看| 成人黄色视频免费在线看| 天堂俺去俺来也www色官网| 亚洲久久久国产精品| 国产一区二区在线观看av| a级毛片黄视频| 亚洲成av片中文字幕在线观看| 一本色道久久久久久精品综合| 水蜜桃什么品种好| 十八禁网站网址无遮挡| 人人妻人人澡人人看| 成年人午夜在线观看视频| 久久亚洲国产成人精品v| 欧美日韩福利视频一区二区| 2018国产大陆天天弄谢| 亚洲精品国产区一区二| 99精国产麻豆久久婷婷| 中文精品一卡2卡3卡4更新| 水蜜桃什么品种好| 久久久久精品人妻al黑| 一区二区av电影网| 午夜激情久久久久久久| 侵犯人妻中文字幕一二三四区| 免费在线观看完整版高清| 婷婷色综合大香蕉| 激情五月婷婷亚洲| 三上悠亚av全集在线观看| 欧美激情 高清一区二区三区| 亚洲成人免费电影在线观看 | 黄网站色视频无遮挡免费观看| 考比视频在线观看| 国产黄频视频在线观看| 国产不卡av网站在线观看| 九草在线视频观看| 亚洲精品久久久久久婷婷小说| 亚洲精品国产一区二区精华液| 亚洲专区国产一区二区| 精品少妇黑人巨大在线播放| 老司机午夜十八禁免费视频| 亚洲午夜精品一区,二区,三区| 午夜福利一区二区在线看| 两性夫妻黄色片| 一级毛片我不卡| 欧美黑人精品巨大| 如日韩欧美国产精品一区二区三区| 丝袜美足系列| 无遮挡黄片免费观看| 亚洲一区二区三区欧美精品| 国产av国产精品国产| 国产又爽黄色视频| 如日韩欧美国产精品一区二区三区| 咕卡用的链子| av视频免费观看在线观看| 欧美亚洲 丝袜 人妻 在线| 日本av手机在线免费观看| 久久久精品区二区三区| 看十八女毛片水多多多| 脱女人内裤的视频| 看免费成人av毛片| 久久青草综合色| 久久久久精品人妻al黑| 国产成人免费无遮挡视频| 九草在线视频观看| 精品卡一卡二卡四卡免费| 亚洲成色77777| 在线观看免费高清a一片| 19禁男女啪啪无遮挡网站| 脱女人内裤的视频| 19禁男女啪啪无遮挡网站| 国产av国产精品国产| 久久鲁丝午夜福利片| 亚洲 欧美一区二区三区| 亚洲,欧美,日韩| 两个人看的免费小视频| 成年人免费黄色播放视频| 一区二区三区四区激情视频| 90打野战视频偷拍视频| 夜夜骑夜夜射夜夜干| 免费女性裸体啪啪无遮挡网站| 美国免费a级毛片| 香蕉丝袜av| 国产精品久久久久成人av| 免费女性裸体啪啪无遮挡网站| 超碰成人久久| 伊人亚洲综合成人网| 精品卡一卡二卡四卡免费| 另类亚洲欧美激情| 日韩av不卡免费在线播放| 精品久久久久久电影网| 亚洲国产精品成人久久小说| 19禁男女啪啪无遮挡网站| 亚洲国产精品一区三区| 巨乳人妻的诱惑在线观看| 国产欧美日韩综合在线一区二区| 欧美精品亚洲一区二区| 国产高清不卡午夜福利| 国产亚洲欧美精品永久| 精品少妇一区二区三区视频日本电影| 亚洲av电影在线进入| 欧美日韩福利视频一区二区| 又粗又硬又长又爽又黄的视频| 中文字幕亚洲精品专区| 永久免费av网站大全| av天堂久久9| 国产一区有黄有色的免费视频| 日本一区二区免费在线视频| 精品久久久精品久久久| 亚洲国产精品999| 性少妇av在线| 亚洲精品成人av观看孕妇| 国产一区二区三区综合在线观看| 色综合欧美亚洲国产小说| 黄色 视频免费看| 欧美xxⅹ黑人| 校园人妻丝袜中文字幕| 免费少妇av软件| 麻豆国产av国片精品| 亚洲精品日本国产第一区| 91精品三级在线观看| 国产精品免费大片| 天天躁夜夜躁狠狠躁躁| 中国美女看黄片| 无限看片的www在线观看| 免费在线观看完整版高清| 亚洲国产欧美在线一区| 999久久久国产精品视频| 中国美女看黄片| 最近手机中文字幕大全| 黄色视频不卡| 男女高潮啪啪啪动态图| 精品人妻一区二区三区麻豆| 久9热在线精品视频| 欧美日韩精品网址| 啦啦啦 在线观看视频| 国产人伦9x9x在线观看| 精品人妻一区二区三区麻豆| 如日韩欧美国产精品一区二区三区| 水蜜桃什么品种好| h视频一区二区三区| 亚洲少妇的诱惑av| 久久人妻福利社区极品人妻图片 | 久久人人爽av亚洲精品天堂| 久久人人97超碰香蕉20202| 亚洲成人免费av在线播放| 十八禁人妻一区二区| 一个人免费看片子| 亚洲色图 男人天堂 中文字幕| 一级黄色大片毛片| 婷婷色麻豆天堂久久| 久久久久国产精品人妻一区二区| 久久精品国产亚洲av高清一级| 天天躁日日躁夜夜躁夜夜| 国产一区二区三区综合在线观看| 国产高清国产精品国产三级| 巨乳人妻的诱惑在线观看| 七月丁香在线播放| 丝瓜视频免费看黄片| 久久精品久久久久久噜噜老黄| 国产日韩欧美视频二区| 波多野结衣一区麻豆| 亚洲国产精品国产精品| 日本猛色少妇xxxxx猛交久久| 尾随美女入室| 精品卡一卡二卡四卡免费| 在线看a的网站| 97精品久久久久久久久久精品| 午夜av观看不卡| 国产亚洲一区二区精品| 亚洲激情五月婷婷啪啪| 国产亚洲欧美精品永久| 免费在线观看视频国产中文字幕亚洲 | 免费女性裸体啪啪无遮挡网站| 校园人妻丝袜中文字幕| 亚洲成人国产一区在线观看 | 久久久国产欧美日韩av| 久久久精品国产亚洲av高清涩受| 丝瓜视频免费看黄片| 成人手机av| 在线观看www视频免费| 久久人妻熟女aⅴ| 无限看片的www在线观看| 成在线人永久免费视频| 一本综合久久免费| 少妇裸体淫交视频免费看高清 | 亚洲伊人色综图| 久久免费观看电影| xxxhd国产人妻xxx| 久久精品aⅴ一区二区三区四区| 老司机午夜十八禁免费视频| videos熟女内射| 精品久久蜜臀av无| 国产在线一区二区三区精| 国产麻豆69| videos熟女内射| 一级毛片 在线播放| 亚洲第一av免费看| 日本猛色少妇xxxxx猛交久久| 自线自在国产av| bbb黄色大片| 一边摸一边做爽爽视频免费| 男女免费视频国产| 婷婷色综合www| 日韩,欧美,国产一区二区三区| 大片电影免费在线观看免费| 丝袜在线中文字幕| 交换朋友夫妻互换小说| 热re99久久国产66热| 久久久欧美国产精品| 色综合欧美亚洲国产小说| 欧美黑人精品巨大| 国产成人啪精品午夜网站| 国产又色又爽无遮挡免| 9色porny在线观看| 高清视频免费观看一区二区| 免费在线观看日本一区| 日本91视频免费播放| a级毛片在线看网站| 高潮久久久久久久久久久不卡| 国产深夜福利视频在线观看| 黄频高清免费视频| www.熟女人妻精品国产| 欧美 日韩 精品 国产| 国产高清不卡午夜福利| av网站在线播放免费| 建设人人有责人人尽责人人享有的| 中文字幕人妻丝袜一区二区| 精品国产乱码久久久久久小说| 91九色精品人成在线观看| 欧美在线黄色| 1024视频免费在线观看| 精品第一国产精品| 午夜视频精品福利| 性色av乱码一区二区三区2| 国产亚洲午夜精品一区二区久久| 黄网站色视频无遮挡免费观看| 国产亚洲欧美在线一区二区| 国产精品人妻久久久影院| 国产日韩欧美视频二区| 久久精品人人爽人人爽视色| 国产男人的电影天堂91| 国产亚洲一区二区精品| 亚洲成色77777| 亚洲国产中文字幕在线视频| 国产一级毛片在线| 你懂的网址亚洲精品在线观看| 欧美国产精品一级二级三级| 女人被躁到高潮嗷嗷叫费观| 男女之事视频高清在线观看 | 欧美日韩国产mv在线观看视频| 久久狼人影院| 精品熟女少妇八av免费久了| 无限看片的www在线观看| 国产伦理片在线播放av一区| 色婷婷av一区二区三区视频| 少妇 在线观看| 夫妻性生交免费视频一级片| 欧美国产精品一级二级三级| 久久人人97超碰香蕉20202| av网站免费在线观看视频| 高清不卡的av网站| 青春草视频在线免费观看| 久久精品亚洲av国产电影网| 男女国产视频网站| 国产成人欧美| 国产高清不卡午夜福利| 国产成人av教育| 欧美精品亚洲一区二区| 久久精品人人爽人人爽视色| 激情五月婷婷亚洲| videos熟女内射| 国产精品一国产av| 手机成人av网站| 夫妻性生交免费视频一级片| 国产精品一区二区在线不卡| 精品亚洲成国产av| 男人操女人黄网站| 9热在线视频观看99| 日韩熟女老妇一区二区性免费视频| 国产精品欧美亚洲77777| 午夜免费成人在线视频| 国产色视频综合| 美女国产高潮福利片在线看| 亚洲成色77777| 国产精品一区二区免费欧美 | 另类精品久久| 久久99一区二区三区| 亚洲成人手机| 人人妻人人爽人人添夜夜欢视频| 国产男人的电影天堂91| 日韩制服丝袜自拍偷拍| 汤姆久久久久久久影院中文字幕| 99国产精品一区二区三区| av有码第一页| 两个人看的免费小视频| h视频一区二区三区| 最新在线观看一区二区三区 | 日韩 欧美 亚洲 中文字幕| 精品一区二区三区四区五区乱码 | 丁香六月天网| 成人黄色视频免费在线看| 久久久久国产精品人妻一区二区| 少妇裸体淫交视频免费看高清 | 久久精品国产亚洲av高清一级| 久久人人爽人人片av| 久久国产精品男人的天堂亚洲| 精品久久久久久电影网| 97在线人人人人妻| 美女扒开内裤让男人捅视频| 免费少妇av软件| 在线观看国产h片| 在线天堂中文资源库| 又黄又粗又硬又大视频| 中国美女看黄片| 三上悠亚av全集在线观看| 亚洲免费av在线视频| 精品视频人人做人人爽| 国产精品一区二区免费欧美 | 人人妻人人澡人人爽人人夜夜| 女性被躁到高潮视频| 亚洲久久久国产精品| 久久性视频一级片| 欧美精品亚洲一区二区|