• <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ù)傳遞方式剖析
    飞空精品影院首页| 香蕉丝袜av| 少妇人妻久久综合中文| 欧美在线一区亚洲| 婷婷色麻豆天堂久久| 久久久亚洲精品成人影院| 日韩av不卡免费在线播放| 亚洲一码二码三码区别大吗| 满18在线观看网站| 人成视频在线观看免费观看| 久久久久久久久久久久大奶| 中文欧美无线码| 亚洲美女视频黄频| 国产精品亚洲av一区麻豆 | 汤姆久久久久久久影院中文字幕| 国产一区二区三区综合在线观看| 男人添女人高潮全过程视频| 热re99久久国产66热| xxx大片免费视频| bbb黄色大片| 十八禁人妻一区二区| 亚洲精品久久久久久婷婷小说| 国产精品偷伦视频观看了| 欧美日韩视频精品一区| 美女扒开内裤让男人捅视频| 天堂8中文在线网| 精品一区二区三区四区五区乱码 | 天天躁夜夜躁狠狠躁躁| 男人爽女人下面视频在线观看| 热99久久久久精品小说推荐| 久久久国产欧美日韩av| 国产深夜福利视频在线观看| 五月开心婷婷网| 在线观看免费午夜福利视频| 精品第一国产精品| 99热全是精品| 国产av一区二区精品久久| 高清黄色对白视频在线免费看| 色婷婷av一区二区三区视频| 免费观看性生交大片5| 欧美日韩av久久| 天天躁狠狠躁夜夜躁狠狠躁| 黄色一级大片看看| 视频区图区小说| 亚洲精品av麻豆狂野| 国产精品久久久久久精品古装| 熟女av电影| 1024视频免费在线观看| 亚洲国产中文字幕在线视频| 国产黄色视频一区二区在线观看| 80岁老熟妇乱子伦牲交| 永久免费av网站大全| 久久久久精品久久久久真实原创| 久久韩国三级中文字幕| 午夜福利视频在线观看免费| 亚洲欧美一区二区三区黑人| 欧美中文综合在线视频| 一级黄片播放器| 国产精品香港三级国产av潘金莲 | 国产精品秋霞免费鲁丝片| 国产成人av激情在线播放| 丰满饥渴人妻一区二区三| 国产又色又爽无遮挡免| 亚洲色图 男人天堂 中文字幕| 人人澡人人妻人| 激情视频va一区二区三区| kizo精华| 日韩一本色道免费dvd| www.精华液| 超碰成人久久| 蜜桃在线观看..| av网站免费在线观看视频| 国产精品免费大片| 亚洲精品第二区| 亚洲,欧美精品.| 91国产中文字幕| 国产成人av激情在线播放| 999精品在线视频| 十八禁网站网址无遮挡| 亚洲国产av新网站| 又大又黄又爽视频免费| 日韩人妻精品一区2区三区| 国产av码专区亚洲av| 天天操日日干夜夜撸| 制服丝袜香蕉在线| 日韩熟女老妇一区二区性免费视频| 精品一区二区三卡| 青春草视频在线免费观看| 亚洲欧美精品自产自拍| 日韩中文字幕视频在线看片| 日本欧美国产在线视频| 搡老岳熟女国产| 久久久国产精品麻豆| 中文字幕人妻熟女乱码| 王馨瑶露胸无遮挡在线观看| 国产精品久久久av美女十八| 你懂的网址亚洲精品在线观看| 99精品久久久久人妻精品| av网站免费在线观看视频| 亚洲四区av| 三上悠亚av全集在线观看| 日韩一区二区视频免费看| 久久久精品免费免费高清| 在线观看免费视频网站a站| 男人添女人高潮全过程视频| 宅男免费午夜| 美女脱内裤让男人舔精品视频| 婷婷色麻豆天堂久久| 99热网站在线观看| 91精品国产国语对白视频| 亚洲一区中文字幕在线| av线在线观看网站| 黄色一级大片看看| 精品国产乱码久久久久久小说| 久久99一区二区三区| 看十八女毛片水多多多| 黑丝袜美女国产一区| 亚洲精品美女久久av网站| 一级毛片黄色毛片免费观看视频| 成人亚洲欧美一区二区av| 亚洲精品美女久久av网站| 国产精品二区激情视频| 精品国产乱码久久久久久男人| 久久性视频一级片| 国产一区亚洲一区在线观看| 精品卡一卡二卡四卡免费| 精品亚洲乱码少妇综合久久| 亚洲在久久综合| 69精品国产乱码久久久| 老司机亚洲免费影院| 国产亚洲av片在线观看秒播厂| 精品免费久久久久久久清纯 | 亚洲欧洲日产国产| 久久国产亚洲av麻豆专区| xxx大片免费视频| 最新的欧美精品一区二区| 中文欧美无线码| 精品久久久久久电影网| 69精品国产乱码久久久| 中文欧美无线码| 亚洲精品aⅴ在线观看| 人成视频在线观看免费观看| 国产精品一国产av| 搡老岳熟女国产| 欧美日韩一区二区视频在线观看视频在线| 青春草亚洲视频在线观看| 亚洲av综合色区一区| 99国产精品免费福利视频| 免费高清在线观看视频在线观看| 国产成人精品无人区| 久久久国产精品麻豆| www.av在线官网国产| 亚洲成色77777| 久久久国产精品麻豆| 天天操日日干夜夜撸| 成人国产av品久久久| 色视频在线一区二区三区| 精品国产超薄肉色丝袜足j| 91精品三级在线观看| 国产 一区精品| 久久青草综合色| 国产精品一二三区在线看| 亚洲精品一二三| 大香蕉久久成人网| 黄色一级大片看看| 成人漫画全彩无遮挡| √禁漫天堂资源中文www| 一二三四中文在线观看免费高清| 久久人人爽人人片av| 建设人人有责人人尽责人人享有的| 国产成人欧美| 韩国精品一区二区三区| av视频免费观看在线观看| 中文字幕另类日韩欧美亚洲嫩草| 日韩制服骚丝袜av| 高清不卡的av网站| 999精品在线视频| 国产一区二区三区综合在线观看| 日韩av在线免费看完整版不卡| 国产精品 欧美亚洲| 男人爽女人下面视频在线观看| 精品一区二区三卡| 久久99精品国语久久久| 美女福利国产在线| 考比视频在线观看| 国产国语露脸激情在线看| 9191精品国产免费久久| 国产精品久久久人人做人人爽| 香蕉国产在线看| 亚洲,一卡二卡三卡| 国产乱人偷精品视频| 欧美在线一区亚洲| 国产成人免费无遮挡视频| 午夜影院在线不卡| 如日韩欧美国产精品一区二区三区| 毛片一级片免费看久久久久| 巨乳人妻的诱惑在线观看| 汤姆久久久久久久影院中文字幕| 丰满少妇做爰视频| 91精品三级在线观看| 成年女人毛片免费观看观看9 | 国产精品久久久久久精品电影小说| 亚洲精品一二三| 日本vs欧美在线观看视频| 免费在线观看视频国产中文字幕亚洲 | 久久免费观看电影| 日韩制服骚丝袜av| 亚洲精品乱久久久久久| 高清不卡的av网站| 纯流量卡能插随身wifi吗| 国产一卡二卡三卡精品 | 可以免费在线观看a视频的电影网站 | 久久久久网色| 国产亚洲一区二区精品| 国产一区二区 视频在线| 日韩成人av中文字幕在线观看| 99久国产av精品国产电影| 久久久久久免费高清国产稀缺| 国产日韩欧美亚洲二区| 人妻一区二区av| 欧美日韩一区二区视频在线观看视频在线| 亚洲国产av影院在线观看| 久久97久久精品| 久久久久久人人人人人| 日韩,欧美,国产一区二区三区| 国产极品粉嫩免费观看在线| av一本久久久久| 狠狠精品人妻久久久久久综合| 国产免费福利视频在线观看| av国产久精品久网站免费入址| 亚洲精华国产精华液的使用体验| 国产一区亚洲一区在线观看| 欧美 日韩 精品 国产| 纵有疾风起免费观看全集完整版| 毛片一级片免费看久久久久| 亚洲,欧美,日韩| 亚洲伊人久久精品综合| 悠悠久久av| 最近最新中文字幕大全免费视频 | 欧美日韩国产mv在线观看视频| 精品一品国产午夜福利视频| 少妇的丰满在线观看| 另类精品久久| 一级片免费观看大全| 精品国产国语对白av| 人妻一区二区av| 中文精品一卡2卡3卡4更新| 老司机靠b影院| 亚洲国产欧美一区二区综合| 不卡av一区二区三区| 久久精品国产亚洲av涩爱| 亚洲av福利一区| 久久久久久人妻| 视频在线观看一区二区三区| av女优亚洲男人天堂| 国产一区二区激情短视频 | 爱豆传媒免费全集在线观看| 久久久久久人人人人人| 欧美精品一区二区免费开放| 秋霞在线观看毛片| 日韩一本色道免费dvd| 女人爽到高潮嗷嗷叫在线视频| 亚洲成av片中文字幕在线观看| 久久久国产一区二区| 熟妇人妻不卡中文字幕| 久久99精品国语久久久| 日韩一卡2卡3卡4卡2021年| 亚洲av成人精品一二三区| xxx大片免费视频| 女人爽到高潮嗷嗷叫在线视频| 午夜福利视频在线观看免费| 天天操日日干夜夜撸| 国产精品一区二区在线不卡| 亚洲成人一二三区av| 看免费成人av毛片| 只有这里有精品99| 免费久久久久久久精品成人欧美视频| 老司机在亚洲福利影院| 国产免费又黄又爽又色| 亚洲成人av在线免费| 99香蕉大伊视频| 伦理电影免费视频| 国产精品嫩草影院av在线观看| 午夜免费观看性视频| 日韩人妻精品一区2区三区| 成人漫画全彩无遮挡| 久久久久久久国产电影| 人体艺术视频欧美日本| 色综合欧美亚洲国产小说| 水蜜桃什么品种好| 亚洲欧美精品自产自拍| 搡老乐熟女国产| 亚洲欧美清纯卡通| 久久久久精品久久久久真实原创| 狂野欧美激情性xxxx| 国产免费视频播放在线视频| 国产欧美日韩一区二区三区在线| 免费高清在线观看日韩| 精品久久蜜臀av无| 九色亚洲精品在线播放| 亚洲久久久国产精品| 久久久精品国产亚洲av高清涩受| 老司机靠b影院| 日韩大码丰满熟妇| 麻豆乱淫一区二区| 这个男人来自地球电影免费观看 | 国产免费现黄频在线看| 久久午夜综合久久蜜桃| 80岁老熟妇乱子伦牲交| 亚洲综合色网址| 99久久人妻综合| 99精品久久久久人妻精品| 韩国高清视频一区二区三区| 国产黄色免费在线视频| 99久久99久久久精品蜜桃| 新久久久久国产一级毛片| 少妇被粗大的猛进出69影院| 免费高清在线观看日韩| 成人国产麻豆网| 丰满少妇做爰视频| 亚洲成人免费av在线播放| 国产成人精品在线电影| 男人操女人黄网站| 黄色毛片三级朝国网站| 亚洲av成人不卡在线观看播放网 | 久久久久精品性色| 亚洲在久久综合| av又黄又爽大尺度在线免费看| 亚洲精品在线美女| 日本av免费视频播放| 国产精品一区二区精品视频观看| 日韩一本色道免费dvd| 男人爽女人下面视频在线观看| 男女之事视频高清在线观看 | 我要看黄色一级片免费的| 日韩熟女老妇一区二区性免费视频| 9色porny在线观看| 中文字幕人妻丝袜一区二区 | 成年人免费黄色播放视频| 多毛熟女@视频| 国产成人系列免费观看| 精品久久蜜臀av无| 日韩电影二区| 免费久久久久久久精品成人欧美视频| 一区二区日韩欧美中文字幕| 精品一区在线观看国产| 国产成人午夜福利电影在线观看| 欧美精品av麻豆av| 欧美变态另类bdsm刘玥| 青春草亚洲视频在线观看| 热99久久久久精品小说推荐| 成人漫画全彩无遮挡| 1024香蕉在线观看| av又黄又爽大尺度在线免费看| 欧美成人午夜精品| 天天影视国产精品| 欧美亚洲日本最大视频资源| 亚洲精品美女久久久久99蜜臀 | 在线 av 中文字幕| tube8黄色片| 超色免费av| 美国免费a级毛片| 蜜桃在线观看..| 免费不卡黄色视频| 国产亚洲一区二区精品| 国产极品天堂在线| 麻豆精品久久久久久蜜桃| 视频在线观看一区二区三区| 性色av一级| 久久精品亚洲av国产电影网| 飞空精品影院首页| 日本wwww免费看| 伊人久久大香线蕉亚洲五| 午夜老司机福利片| 国产亚洲精品第一综合不卡| 亚洲综合色网址| 精品视频人人做人人爽| 夫妻午夜视频| 欧美老熟妇乱子伦牲交| 久久青草综合色| 捣出白浆h1v1| 亚洲国产欧美网| 亚洲成人av在线免费| 一级毛片我不卡| 精品国产一区二区三区久久久樱花| 国语对白做爰xxxⅹ性视频网站| 99精国产麻豆久久婷婷| 超碰成人久久| a级毛片在线看网站| 最近2019中文字幕mv第一页| 中文欧美无线码| 亚洲精品日本国产第一区| 亚洲成人国产一区在线观看 | 少妇被粗大猛烈的视频| 精品国产国语对白av| 久久精品国产亚洲av涩爱| 久久久国产一区二区| 18禁观看日本| 天天躁夜夜躁狠狠久久av| xxxhd国产人妻xxx| 欧美av亚洲av综合av国产av | 9热在线视频观看99| 日韩熟女老妇一区二区性免费视频| 中国国产av一级| 人人妻,人人澡人人爽秒播 | 美女脱内裤让男人舔精品视频| 久久热在线av| tube8黄色片| 成人国产麻豆网| 中文字幕亚洲精品专区| 国产成人免费观看mmmm| 成年动漫av网址| 精品一区在线观看国产| 欧美变态另类bdsm刘玥| 女人精品久久久久毛片| 麻豆精品久久久久久蜜桃| 色综合欧美亚洲国产小说| 国产精品久久久久成人av| 亚洲第一青青草原| 色综合欧美亚洲国产小说| 如何舔出高潮| www.av在线官网国产| 免费久久久久久久精品成人欧美视频| 男人舔女人的私密视频| 国产黄频视频在线观看| 一本大道久久a久久精品| 美女高潮到喷水免费观看| 黄色怎么调成土黄色| av有码第一页| 99久久99久久久精品蜜桃| 亚洲精品美女久久av网站| 亚洲精品自拍成人| 国产 一区精品| 午夜福利影视在线免费观看| 国产伦理片在线播放av一区| 国产亚洲欧美精品永久| 成年av动漫网址| 色精品久久人妻99蜜桃| 我的亚洲天堂| 伊人久久大香线蕉亚洲五| 亚洲av国产av综合av卡| 亚洲欧美清纯卡通| 国产在线视频一区二区| 国产精品人妻久久久影院| 亚洲精品一二三| 国产一区二区激情短视频 | av片东京热男人的天堂| 国产精品香港三级国产av潘金莲 | 丰满饥渴人妻一区二区三| av福利片在线| 在线观看人妻少妇| 久久久久精品国产欧美久久久 | 日韩 亚洲 欧美在线| 91aial.com中文字幕在线观看| www.自偷自拍.com| 欧美日韩亚洲国产一区二区在线观看 | 精品亚洲乱码少妇综合久久| 美女扒开内裤让男人捅视频| 99re6热这里在线精品视频| 中文字幕高清在线视频| 51午夜福利影视在线观看| 黑人巨大精品欧美一区二区mp4| 99在线视频只有这里精品首页| 日本五十路高清| 亚洲男人的天堂狠狠| 午夜福利,免费看| 国产成人精品久久二区二区免费| а√天堂www在线а√下载| 国产精品亚洲一级av第二区| 国产成人av教育| 国产在线观看jvid| 欧美大码av| 国产午夜精品久久久久久| 又黄又粗又硬又大视频| 又大又爽又粗| 黑人巨大精品欧美一区二区蜜桃| 欧美另类亚洲清纯唯美| 久久婷婷人人爽人人干人人爱 | 中文字幕人成人乱码亚洲影| 99久久精品国产亚洲精品| 亚洲全国av大片| 欧美日韩一级在线毛片| 亚洲电影在线观看av| 亚洲人成电影观看| 麻豆成人av在线观看| 一个人观看的视频www高清免费观看 | tocl精华| 精品一区二区三区视频在线观看免费| 69av精品久久久久久| 老司机深夜福利视频在线观看| 露出奶头的视频| 日日摸夜夜添夜夜添小说| 制服丝袜大香蕉在线| 亚洲欧美精品综合一区二区三区| 操出白浆在线播放| 啦啦啦免费观看视频1| 亚洲情色 制服丝袜| 露出奶头的视频| 午夜激情av网站| 在线观看日韩欧美| 一a级毛片在线观看| 人妻丰满熟妇av一区二区三区| 亚洲人成网站在线播放欧美日韩| 男女床上黄色一级片免费看| svipshipincom国产片| 国产精品久久久av美女十八| www国产在线视频色| 搡老岳熟女国产| 亚洲情色 制服丝袜| 亚洲九九香蕉| 一边摸一边做爽爽视频免费| 久久这里只有精品19| 一a级毛片在线观看| 久久青草综合色| 日日干狠狠操夜夜爽| 亚洲成人免费电影在线观看| 女人精品久久久久毛片| 亚洲,欧美精品.| 好看av亚洲va欧美ⅴa在| 中亚洲国语对白在线视频| 亚洲 国产 在线| √禁漫天堂资源中文www| 亚洲中文av在线| 一边摸一边抽搐一进一出视频| 波多野结衣一区麻豆| 美女免费视频网站| 一级毛片女人18水好多| 国产高清有码在线观看视频 | 国产极品粉嫩免费观看在线| 欧美黑人精品巨大| 麻豆一二三区av精品| 母亲3免费完整高清在线观看| 午夜视频精品福利| √禁漫天堂资源中文www| 成人免费观看视频高清| 国产乱人伦免费视频| 精品熟女少妇八av免费久了| 亚洲精品久久成人aⅴ小说| 免费一级毛片在线播放高清视频 | 午夜视频精品福利| 欧洲精品卡2卡3卡4卡5卡区| 成人亚洲精品一区在线观看| 黑人巨大精品欧美一区二区mp4| 日韩一卡2卡3卡4卡2021年| 少妇被粗大的猛进出69影院| 国产亚洲精品av在线| 高清毛片免费观看视频网站| 亚洲国产毛片av蜜桃av| 久久青草综合色| 日韩av在线大香蕉| 欧美+亚洲+日韩+国产| 国产av一区在线观看免费| 天天添夜夜摸| 中文亚洲av片在线观看爽| 首页视频小说图片口味搜索| www.999成人在线观看| 日韩精品中文字幕看吧| bbb黄色大片| 他把我摸到了高潮在线观看| 美国免费a级毛片| tocl精华| 亚洲片人在线观看| 亚洲国产欧美网| 亚洲五月婷婷丁香| 国产又爽黄色视频| 久久国产亚洲av麻豆专区| 国产精品久久视频播放| 欧美日本亚洲视频在线播放| 午夜免费鲁丝| 国产精品久久久久久人妻精品电影| 成人国产一区最新在线观看| 午夜久久久久精精品| 久久中文字幕一级| 亚洲成人久久性| 欧美国产日韩亚洲一区| 亚洲九九香蕉| 亚洲成人久久性| 欧美国产日韩亚洲一区| 丝袜美腿诱惑在线| 免费在线观看影片大全网站| 亚洲国产精品久久男人天堂| 极品教师在线免费播放| 老汉色∧v一级毛片| 欧美中文综合在线视频| av在线天堂中文字幕| 激情在线观看视频在线高清| 国产成人影院久久av| 成人av一区二区三区在线看| 精品无人区乱码1区二区| 成人三级黄色视频| 亚洲第一电影网av| 岛国视频午夜一区免费看| 一级毛片精品| 大陆偷拍与自拍| 免费在线观看视频国产中文字幕亚洲| 一级毛片精品| 久久人妻福利社区极品人妻图片| 亚洲国产精品合色在线| 最近最新免费中文字幕在线| 久久香蕉精品热| 在线观看日韩欧美| 国产av在哪里看| 精品欧美一区二区三区在线| 国产精品久久久久久精品电影 | 免费观看精品视频网站| 欧美日韩中文字幕国产精品一区二区三区 | 一本综合久久免费| 日本 欧美在线| ponron亚洲| 亚洲精品国产一区二区精华液| 91成年电影在线观看| 黄色成人免费大全| 一区在线观看完整版| 欧美日本亚洲视频在线播放| 国产精品久久电影中文字幕|