• <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-03-26 13:45:51唐新國
    關(guān)鍵詞:分派調(diào)用靜態(tài)

    唐新國

    (1.湖北職業(yè)技術(shù)學(xué)院信息技術(shù)學(xué)院 中國 孝感 432100;2.武漢商學(xué)院信息工程系 中國 武漢 430056)

    ?

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

    唐新國1

    (1.湖北職業(yè)技術(shù)學(xué)院信息技術(shù)學(xué)院中國 孝感 432100;2.武漢商學(xué)院信息工程系中國 武漢430056)

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

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

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

    MPL[1](Meta-Programming 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展.

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

    模板元編程技術(shù)有兩個強大的優(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模板族來非侵入地(non-intrusively)顯示管理模板函數(shù)的重載集的方式來實現(xiàn)C++中靜態(tài)分派技術(shù),不但提出了一種新的靜態(tài)分派思路,更為重要的是通過這種方式可以根據(jù)模板函數(shù)的返回值來重載模板函數(shù).

    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)行分派通常是使用if-else或switch語句來實現(xiàn)的.大部分情況下其執(zhí)行期的成本是微不足道的,然而有時還是無法常常這么做,因為if-else或switch語句要求每一個語句分支都要能夠得到編譯成功,即使該條件在編譯期就知道了.

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

    template〈class T〉

    class NiftyContainer{};

    由于NiftyContainer是泛型容器,那么它即可以包括類型為T的對象引用,也可以包括指向類型為T的對象指針.如果要復(fù)制泛型容器NiftyContainer中的某個元素,可以調(diào)用其copy構(gòu)造函數(shù)(針對non-polymorphic類型)或調(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ù)

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

    }

    }

    };

    上述算法表面上看沒有問題,但實際上任何一款C++編譯器都不會使之僥幸編譯通過.因為編譯器會編譯每一個語句分支,如果多態(tài)算法使用pSomeObj-〉Clone(),那么對任何一個沒有定義成員函數(shù)Clone()的類型,編譯器都會停留在語句pSomeObj-〉Clone()處告之編譯通不過.當(dāng)然對non-polymorphic類型也有可能編譯失敗,因為有些類型會將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]來非侵入地(non-intrusively)顯示管理模板函數(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模板非侵入地(non-intrusively)顯式管理重載集,從而達(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泛型算法.a(chǎn)dvance泛型算法[5]就是一個使用標(biāo)簽分派的極好例子,advance用來將一個迭代器i移動n個位置,對不同類型的迭代器i實現(xiàn)的策略是不同的.如果i是隨機迭代器,則可用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是隨機迭代器

    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模板族來非侵入地(non-intrusively)顯示管理模板函數(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模板族來非侵入地(non-intrusively)顯示管理模板函數(shù)的重載集的方式來實現(xiàn)C++中靜態(tài)分派技術(shù),提出了一種新的靜態(tài)分派思路,通過這種方式可以根據(jù)模板函數(shù)的返回值來重載模板函數(shù).

    參考文獻(xiàn):

    [1]DAVID A.C++模板元編程[M].榮耀,譯.北京:機械工業(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].計算機應(yīng)用與軟件, 2013,30(1):190-195.

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

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

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

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

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

    [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.

    (編輯陳笑梅)

    A Static Dispatching Technique in C++ with

    Explicitly Managing the Overload Set

    TANGXin-guo1*,ZHOUTian-hong2

    (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 enableif template group in Boost library non-intrusively 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

    中圖分類號TP311

    文獻(xiàn)標(biāo)識碼A

    文章編號1000-2537(2015)05-0070-06

    通訊作者*,E-mail:hbzytxg@126.com,周天宏2

    基金項目:湖北省職業(yè)技術(shù)教育規(guī)劃課題(2010B04)

    收稿日期:2014-05-08

    DOI:10.7612/j.issn.1000-2537.2015.05.012

    猜你喜歡
    分派調(diào)用靜態(tài)
    靜態(tài)隨機存儲器在軌自檢算法
    核電項目物項調(diào)用管理的應(yīng)用研究
    LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
    《宋元學(xué)案》中程頤思想的詮釋與評價——兼論二程思想的比較及其分派
    論勞思光對宋明儒學(xué)分派問題的研究
    快遞小哥的一天
    新民周刊(2017年9期)2017-03-20 17:45:04
    基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
    跟蹤導(dǎo)練(四)
    機床靜態(tài)及動態(tài)分析
    機電信息(2015年9期)2015-02-27 15:55:56
    具7μA靜態(tài)電流的2A、70V SEPIC/升壓型DC/DC轉(zhuǎn)換器
    国产精品一及| 麻豆乱淫一区二区| 亚洲经典国产精华液单| 禁无遮挡网站| 久久久精品欧美日韩精品| 菩萨蛮人人尽说江南好唐韦庄 | 亚洲精品粉嫩美女一区| 久久这里有精品视频免费| 能在线免费观看的黄片| 卡戴珊不雅视频在线播放| 免费看美女性在线毛片视频| 有码 亚洲区| 国产精品一区二区三区四区免费观看| 国产精品女同一区二区软件| 人体艺术视频欧美日本| 一个人看视频在线观看www免费| 国产精品久久久久久久久免| 日韩高清综合在线| 天堂√8在线中文| 久久久久免费精品人妻一区二区| 色综合色国产| 人体艺术视频欧美日本| 最好的美女福利视频网| 性色avwww在线观看| 国产精品爽爽va在线观看网站| 一边亲一边摸免费视频| 91麻豆精品激情在线观看国产| 精品久久久久久久久av| 少妇裸体淫交视频免费看高清| 欧美成人一区二区免费高清观看| 国产日本99.免费观看| 日本三级黄在线观看| 天堂网av新在线| 91狼人影院| 99精品在免费线老司机午夜| 国产高清不卡午夜福利| 国产午夜福利久久久久久| 波野结衣二区三区在线| av在线蜜桃| 欧美日韩综合久久久久久| 国产成人freesex在线| 久久久久久久久久久免费av| 边亲边吃奶的免费视频| 老熟妇乱子伦视频在线观看| 夫妻性生交免费视频一级片| av天堂中文字幕网| 欧美最新免费一区二区三区| 国产精品av视频在线免费观看| 免费人成在线观看视频色| 高清毛片免费观看视频网站| 国产男人的电影天堂91| 99国产极品粉嫩在线观看| 一级黄色大片毛片| 亚洲国产日韩欧美精品在线观看| 国产精品永久免费网站| 国产视频内射| 亚洲七黄色美女视频| 久久久午夜欧美精品| 日日摸夜夜添夜夜添av毛片| 国产伦一二天堂av在线观看| 国产片特级美女逼逼视频| 国产私拍福利视频在线观看| 精品熟女少妇av免费看| 免费一级毛片在线播放高清视频| 免费在线观看成人毛片| 丝袜美腿在线中文| 精品午夜福利在线看| 亚洲精品成人久久久久久| 成人毛片60女人毛片免费| 看免费成人av毛片| 亚洲欧美日韩高清在线视频| 成人二区视频| 久久久国产成人免费| 亚洲精品久久久久久婷婷小说 | 国产成人福利小说| 神马国产精品三级电影在线观看| 日韩一区二区三区影片| av国产免费在线观看| 美女脱内裤让男人舔精品视频 | 美女大奶头视频| 成人美女网站在线观看视频| 欧美成人a在线观看| 99九九线精品视频在线观看视频| 偷拍熟女少妇极品色| 天堂√8在线中文| 久久亚洲国产成人精品v| av卡一久久| 少妇丰满av| 久久精品人妻少妇| 午夜激情福利司机影院| 日本免费a在线| 国产精品一区二区三区四区久久| 亚洲精品日韩av片在线观看| 在线a可以看的网站| 中文字幕av在线有码专区| 日本一本二区三区精品| 一个人免费在线观看电影| 中文字幕av在线有码专区| 国产综合懂色| 色播亚洲综合网| 中文字幕av成人在线电影| 欧美日本视频| 黄色欧美视频在线观看| 国产日韩欧美在线精品| 人妻久久中文字幕网| 国产精品久久视频播放| 国产亚洲91精品色在线| 久久亚洲精品不卡| 禁无遮挡网站| 丝袜美腿在线中文| 男女边吃奶边做爰视频| 亚洲18禁久久av| 欧美精品国产亚洲| 99久久中文字幕三级久久日本| 亚州av有码| 久久精品91蜜桃| 国产精品一区二区在线观看99 | 级片在线观看| 啦啦啦啦在线视频资源| 成人鲁丝片一二三区免费| 国产av不卡久久| 女同久久另类99精品国产91| 成人美女网站在线观看视频| 国产 一区 欧美 日韩| 又黄又爽又刺激的免费视频.| 日本黄色片子视频| 人妻系列 视频| 久久午夜福利片| 欧美一区二区亚洲| 久久精品综合一区二区三区| 精品久久国产蜜桃| 亚洲精品国产成人久久av| 99在线人妻在线中文字幕| 久久中文看片网| 日韩欧美三级三区| 3wmmmm亚洲av在线观看| 在线观看av片永久免费下载| 日韩一本色道免费dvd| 日日啪夜夜撸| 亚洲av二区三区四区| 久久久久久久亚洲中文字幕| 成年av动漫网址| 国产精品久久久久久久久免| 欧美色欧美亚洲另类二区| 午夜爱爱视频在线播放| av女优亚洲男人天堂| 欧美色视频一区免费| 午夜精品在线福利| 好男人在线观看高清免费视频| 免费电影在线观看免费观看| 亚洲成人av在线免费| 人人妻人人澡人人爽人人夜夜 | 老女人水多毛片| 中文字幕精品亚洲无线码一区| a级毛色黄片| 少妇熟女欧美另类| 成年免费大片在线观看| 欧美成人一区二区免费高清观看| 91久久精品国产一区二区成人| 夜夜爽天天搞| 桃色一区二区三区在线观看| 亚洲欧美中文字幕日韩二区| 99在线人妻在线中文字幕| 亚洲欧美成人综合另类久久久 | 久久精品国产亚洲av涩爱 | 成人毛片a级毛片在线播放| 在线a可以看的网站| 99视频精品全部免费 在线| 插逼视频在线观看| 变态另类成人亚洲欧美熟女| 国产成人freesex在线| 少妇高潮的动态图| 国语自产精品视频在线第100页| 国产白丝娇喘喷水9色精品| 精品少妇黑人巨大在线播放 | 国产精品野战在线观看| 欧美潮喷喷水| 久久这里有精品视频免费| 国产午夜精品一二区理论片| 亚洲精华国产精华液的使用体验 | 变态另类丝袜制服| 国产精品三级大全| a级毛片a级免费在线| 一级二级三级毛片免费看| 国产精品一及| 亚洲自偷自拍三级| 深爱激情五月婷婷| 亚洲最大成人手机在线| 欧美xxxx黑人xx丫x性爽| 亚洲最大成人av| 色吧在线观看| 国产黄a三级三级三级人| 国产成人a∨麻豆精品| 性欧美人与动物交配| av在线老鸭窝| 精品99又大又爽又粗少妇毛片| 麻豆成人午夜福利视频| 色尼玛亚洲综合影院| 毛片女人毛片| 人妻系列 视频| 联通29元200g的流量卡| 亚洲经典国产精华液单| 国产一区二区三区av在线 | 舔av片在线| 亚洲国产精品成人综合色| 一级黄片播放器| 99久国产av精品国产电影| 免费观看的影片在线观看| 校园春色视频在线观看| 日本一本二区三区精品| 人人妻人人澡人人爽人人夜夜 | 精品少妇黑人巨大在线播放 | 国产大屁股一区二区在线视频| 久久草成人影院| 午夜精品国产一区二区电影 | 亚洲精品国产成人久久av| 搡老妇女老女人老熟妇| 午夜福利在线观看吧| 亚洲国产精品成人久久小说 | 国产精品久久久久久亚洲av鲁大| 3wmmmm亚洲av在线观看| 国产精品一区二区三区四区久久| 男女边吃奶边做爰视频| 综合色av麻豆| 高清毛片免费观看视频网站| 国产淫片久久久久久久久| 国产日本99.免费观看| 亚洲精品乱码久久久v下载方式| 尤物成人国产欧美一区二区三区| 国产欧美日韩精品一区二区| 麻豆成人av视频| 亚洲色图av天堂| 99久久久亚洲精品蜜臀av| 少妇人妻一区二区三区视频| 国产精品av视频在线免费观看| 天堂√8在线中文| 观看美女的网站| 亚洲高清免费不卡视频| 午夜爱爱视频在线播放| 欧美3d第一页| 亚洲国产精品久久男人天堂| 久久这里有精品视频免费| 青春草视频在线免费观看| 在线国产一区二区在线| 成年女人看的毛片在线观看| 亚洲成人中文字幕在线播放| 五月玫瑰六月丁香| 久久精品综合一区二区三区| 乱人视频在线观看| 在线观看美女被高潮喷水网站| 免费观看的影片在线观看| 成人二区视频| 欧美变态另类bdsm刘玥| 人妻夜夜爽99麻豆av| 日本五十路高清| 日日撸夜夜添| 日韩av在线大香蕉| 晚上一个人看的免费电影| 日本熟妇午夜| 精华霜和精华液先用哪个| 国产视频首页在线观看| 麻豆国产97在线/欧美| 免费不卡的大黄色大毛片视频在线观看 | 国产精品一二三区在线看| 99热6这里只有精品| 中出人妻视频一区二区| 亚洲美女搞黄在线观看| 亚洲人成网站高清观看| 免费看光身美女| 成人毛片60女人毛片免费| 国产一区二区在线观看日韩| 丰满人妻一区二区三区视频av| 久久久精品94久久精品| 色播亚洲综合网| 少妇人妻精品综合一区二区 | 日日摸夜夜添夜夜添av毛片| 伦理电影大哥的女人| av天堂中文字幕网| 黄色日韩在线| 亚洲欧美日韩东京热| 一个人看的www免费观看视频| 日韩人妻高清精品专区| 美女国产视频在线观看| 激情 狠狠 欧美| 天天躁日日操中文字幕| 美女cb高潮喷水在线观看| 99热这里只有是精品在线观看| 青春草视频在线免费观看| av在线蜜桃| av免费在线看不卡| 成人特级av手机在线观看| 一边摸一边抽搐一进一小说| 日韩 亚洲 欧美在线| 亚洲最大成人中文| 国产成人午夜福利电影在线观看| 亚洲欧美成人精品一区二区| 欧美日韩综合久久久久久| 成人国产麻豆网| 亚洲av一区综合| 亚洲婷婷狠狠爱综合网| 又爽又黄无遮挡网站| 国产精品人妻久久久久久| 日本免费一区二区三区高清不卡| 国产一区二区三区在线臀色熟女| 国产美女午夜福利| 午夜精品国产一区二区电影 | 日韩av在线大香蕉| 日韩 亚洲 欧美在线| 日韩一区二区视频免费看| 久久精品人妻少妇| 听说在线观看完整版免费高清| 麻豆av噜噜一区二区三区| 日本熟妇午夜| 寂寞人妻少妇视频99o| 午夜a级毛片| 国产亚洲91精品色在线| 日韩强制内射视频| 免费搜索国产男女视频| a级毛色黄片| 久久久久久久久久成人| 日韩欧美精品v在线| av在线播放精品| 亚洲精品影视一区二区三区av| 美女 人体艺术 gogo| 观看免费一级毛片| 小说图片视频综合网站| 婷婷六月久久综合丁香| 色播亚洲综合网| 亚洲av电影不卡..在线观看| 不卡视频在线观看欧美| 国产三级在线视频| 亚洲国产欧美人成| 久99久视频精品免费| 亚洲不卡免费看| .国产精品久久| 国产精品一区二区性色av| 午夜a级毛片| 欧美性猛交╳xxx乱大交人| 国产麻豆成人av免费视频| 亚洲三级黄色毛片| 欧美日韩一区二区视频在线观看视频在线 | 热99在线观看视频| 欧美日韩乱码在线| 午夜激情福利司机影院| 国产av麻豆久久久久久久| 国产午夜福利久久久久久| 99久久中文字幕三级久久日本| 亚洲精品影视一区二区三区av| 午夜福利成人在线免费观看| 内射极品少妇av片p| 亚洲精品久久久久久婷婷小说 | 免费观看在线日韩| 久久久久久久久大av| 午夜福利在线观看吧| 亚洲图色成人| 免费av不卡在线播放| 最新中文字幕久久久久| 69av精品久久久久久| 久久草成人影院| 九草在线视频观看| 在线观看av片永久免费下载| 少妇被粗大猛烈的视频| 在线观看美女被高潮喷水网站| 国产久久久一区二区三区| 变态另类成人亚洲欧美熟女| 国产男人的电影天堂91| 国内精品宾馆在线| 又黄又爽又刺激的免费视频.| 亚洲无线观看免费| 99国产极品粉嫩在线观看| a级毛片免费高清观看在线播放| 午夜精品国产一区二区电影 | 天堂影院成人在线观看| 欧美+日韩+精品| 人人妻人人澡欧美一区二区| 日本免费a在线| 中文字幕制服av| 日本黄色视频三级网站网址| 成人特级av手机在线观看| 中国美女看黄片| 校园春色视频在线观看| 欧美潮喷喷水| 全区人妻精品视频| 久久99热这里只有精品18| 国产淫片久久久久久久久| kizo精华| 精品人妻偷拍中文字幕| 麻豆国产97在线/欧美| 三级毛片av免费| 尾随美女入室| 少妇丰满av| av视频在线观看入口| 国产精品久久电影中文字幕| 国产精品.久久久| 高清日韩中文字幕在线| 1024手机看黄色片| 又爽又黄a免费视频| 成人亚洲欧美一区二区av| 亚州av有码| 久久九九热精品免费| 精品一区二区三区视频在线| 欧美变态另类bdsm刘玥| 欧美bdsm另类| 国产淫片久久久久久久久| 久久精品国产亚洲av涩爱 | 亚洲国产精品成人综合色| 欧洲精品卡2卡3卡4卡5卡区| 国国产精品蜜臀av免费| 夜夜夜夜夜久久久久| 欧美不卡视频在线免费观看| 丰满的人妻完整版| 国产亚洲av嫩草精品影院| 国产成人一区二区在线| 一本—道久久a久久精品蜜桃钙片 精品乱码久久久久久99久播 | 亚洲av二区三区四区| 久久久成人免费电影| 国产中年淑女户外野战色| 精品熟女少妇av免费看| 草草在线视频免费看| 亚洲高清免费不卡视频| 久久人妻av系列| 久久久午夜欧美精品| 亚洲精品国产av成人精品| 熟妇人妻久久中文字幕3abv| 久久久久久久久大av| 韩国av在线不卡| 亚洲第一区二区三区不卡| 观看美女的网站| 国产v大片淫在线免费观看| 国产探花极品一区二区| 男女啪啪激烈高潮av片| 床上黄色一级片| 久久99热6这里只有精品| av在线亚洲专区| 欧美日本亚洲视频在线播放| 日韩欧美精品免费久久| 亚洲在久久综合| 欧美精品国产亚洲| 一卡2卡三卡四卡精品乱码亚洲| 国产精品一区二区性色av| 国产精品日韩av在线免费观看| 三级毛片av免费| 久久久久国产网址| 国产精品人妻久久久影院| 久久精品久久久久久久性| 在线观看免费视频日本深夜| 亚洲国产欧美人成| 亚洲久久久久久中文字幕| 日韩欧美 国产精品| 一个人免费在线观看电影| 国产高清三级在线| 亚洲成人精品中文字幕电影| 欧美成人一区二区免费高清观看| 又黄又爽又刺激的免费视频.| 亚洲欧美精品专区久久| 搡老妇女老女人老熟妇| 99热6这里只有精品| 伊人久久精品亚洲午夜| 久久中文看片网| 久久久久性生活片| 婷婷精品国产亚洲av| 国产成人福利小说| 中出人妻视频一区二区| 欧美三级亚洲精品| 欧美性感艳星| 国产 一区 欧美 日韩| 亚洲精品日韩在线中文字幕 | 国产又黄又爽又无遮挡在线| 亚洲精品自拍成人| 国产成人a∨麻豆精品| 久久这里有精品视频免费| 黄片wwwwww| 美女 人体艺术 gogo| 欧美区成人在线视频| av在线天堂中文字幕| 成人美女网站在线观看视频| 哪个播放器可以免费观看大片| av女优亚洲男人天堂| 大香蕉久久网| av在线天堂中文字幕| 亚洲三级黄色毛片| 国产一区二区在线观看日韩| 久久久色成人| 亚洲无线观看免费| 久久人人爽人人爽人人片va| 欧美高清性xxxxhd video| 日产精品乱码卡一卡2卡三| 亚洲四区av| 夫妻性生交免费视频一级片| 亚洲七黄色美女视频| 久久久久久久久中文| 国产国拍精品亚洲av在线观看| 国产av一区在线观看免费| 亚洲精品久久久久久婷婷小说 | 欧美激情国产日韩精品一区| 国产高清不卡午夜福利| 亚洲最大成人av| 成人综合一区亚洲| 久久久久久伊人网av| 国产v大片淫在线免费观看| 日韩av不卡免费在线播放| 亚洲四区av| 成人亚洲欧美一区二区av| а√天堂www在线а√下载| 人人妻人人看人人澡| 一本—道久久a久久精品蜜桃钙片 精品乱码久久久久久99久播 | 中文字幕人妻熟人妻熟丝袜美| 一进一出抽搐gif免费好疼| 亚洲最大成人手机在线| 婷婷亚洲欧美| 亚洲七黄色美女视频| 日日摸夜夜添夜夜添av毛片| 国产精品日韩av在线免费观看| 99热这里只有是精品50| www.色视频.com| 91精品国产九色| 2021天堂中文幕一二区在线观| 成人性生交大片免费视频hd| 亚洲成人av在线免费| 免费看美女性在线毛片视频| 99热精品在线国产| 美女黄网站色视频| 中出人妻视频一区二区| 日产精品乱码卡一卡2卡三| 毛片女人毛片| 国产精品久久久久久久电影| 国产精品久久视频播放| 免费无遮挡裸体视频| а√天堂www在线а√下载| 国产成人一区二区在线| 亚洲最大成人av| 美女被艹到高潮喷水动态| 美女黄网站色视频| 国内久久婷婷六月综合欲色啪| 婷婷色综合大香蕉| 色视频www国产| 日本免费一区二区三区高清不卡| 国产人妻一区二区三区在| 国产成人精品久久久久久| 性插视频无遮挡在线免费观看| 日韩国内少妇激情av| 深爱激情五月婷婷| 久久久久免费精品人妻一区二区| 国产精品一及| 免费黄网站久久成人精品| 国产午夜精品久久久久久一区二区三区| 免费观看的影片在线观看| 三级男女做爰猛烈吃奶摸视频| 免费人成视频x8x8入口观看| 天天一区二区日本电影三级| av在线天堂中文字幕| 午夜免费男女啪啪视频观看| 哪里可以看免费的av片| 日韩视频在线欧美| 亚洲内射少妇av| 看片在线看免费视频| 亚洲欧洲日产国产| 日韩视频在线欧美| 日韩三级伦理在线观看| 99久久成人亚洲精品观看| 最新中文字幕久久久久| 嘟嘟电影网在线观看| 午夜福利在线在线| av女优亚洲男人天堂| 国产一级毛片七仙女欲春2| 午夜老司机福利剧场| 婷婷精品国产亚洲av| 91久久精品国产一区二区成人| 日韩国内少妇激情av| 观看美女的网站| 国产伦一二天堂av在线观看| 舔av片在线| 国产精品不卡视频一区二区| 亚洲精品国产成人久久av| 国产欧美日韩精品一区二区| АⅤ资源中文在线天堂| 亚洲欧美日韩高清在线视频| 久久久久久久久久黄片| 国产 一区 欧美 日韩| 高清日韩中文字幕在线| 级片在线观看| 免费av毛片视频| 亚洲国产精品国产精品| 搡女人真爽免费视频火全软件| 国产精品久久久久久久久免| 精品人妻视频免费看| 国产单亲对白刺激| 国产真实伦视频高清在线观看| 啦啦啦啦在线视频资源| 2021天堂中文幕一二区在线观| 青春草国产在线视频 | 久久精品国产亚洲av香蕉五月| 精品99又大又爽又粗少妇毛片| 国产一区二区在线观看日韩| 欧美成人免费av一区二区三区| 免费观看a级毛片全部| 极品教师在线视频| 3wmmmm亚洲av在线观看| 亚洲精品456在线播放app| 美女大奶头视频| 中文字幕制服av| 精品一区二区免费观看| 日韩欧美国产在线观看| 免费电影在线观看免费观看| 国产综合懂色| 久久精品影院6| 午夜免费男女啪啪视频观看| 美女xxoo啪啪120秒动态图| 国产伦在线观看视频一区| 一区二区三区四区激情视频 | 少妇裸体淫交视频免费看高清| 国产精品99久久久久久久久| 欧美一区二区亚洲| 国产伦在线观看视频一区| 亚洲av第一区精品v没综合|