日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

C++11绑定器bind及function机制

發布時間:2024/3/13 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++11绑定器bind及function机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

🚀 優質資源分享 🚀

學習路線指引(點擊解鎖)知識定位人群定位
🧡 Python實戰微信訂餐小程序 🧡進階級本課程是python flask+微信小程序的完美結合,從項目搭建到騰訊云部署上線,打造一個全棧訂餐系統。
💛Python量化交易實戰💛入門級手把手帶你打造一個易擴展、更安全、效率更高的量化交易系統

前言

之前在學muduo網絡庫時,看到陳碩以基于對象編程的方式,大量使用boost庫中的bind和function機制,如今,這些概念都已引入至C++11,包含在頭文件中。

本篇文章主要梳理C++綁定器相關的內容以及C++11中引入的function機制,其中綁定器主要有三種:bind1st、bind2nd、bind(C++11)。學完本篇內容,將對C++綁定器及function機制等的底層實現有深刻理解,那么我們開始說吧。

函數對象

首先說說函數對象,之所以說函數對象,是因為綁定器、function都涉及到該部分概念。函數對象實際上是類調用operator()()小括號運算符重載,實現像在“調用函數”一樣的效果,因此還有個別名叫“仿函數”。函數對象示例代碼如下:

class Print { public:void operator()(string &s) { cout << s << endl; } };int main() {string s = "hello world!";Print print; //定義了一個函數對象printprint(s);return 0; }

上面代碼print(s);語句,看似像函數調用,其實是類對象print調用其小括號運算符重載print.operator(string &s)。print就是一個函數對象,至此對函數對象就有了基本的認識。

剖析綁定器bind1st、bind2nd

了解了函數對象,接下來我們說說綁定器,為什么需要綁定器?在使用STL時經常會遇到STL算法中需要傳遞某元函數對象,比如在寫sort時,第三個參數決定了我們的排序規則,用來接收一個“比較器”函數對象,該函數對象是一個二元的匿名函數對象,形如greator()或者less()。二元函數對象的意思是,這個函數對象的小括號運算符重載函數接收兩個參數,那么幾元就表示接收幾個參數。下面是庫中自帶的greater和less模板類的源碼實現,可以看到是對小括號運算符重載的實現,sort第三個參數接收該模板類的二元匿名函數對象。

template<typename \_Tp>struct greater : public binary\_function<\_Tp, \_Tp, bool>{_GLIBCXX14_CONSTEXPRbooloperator()(const _Tp& __x, const _Tp& __y) const{ return __x > __y; }};template<typename \_Tp>struct less : public binary\_function<\_Tp, \_Tp, bool>{_GLIBCXX14_CONSTEXPRbooloperator()(const _Tp& __x, const _Tp& __y) const{ return __x < __y; }};

再回到剛才的問題,那為什么需綁定器?由于STL接口的限制,有時我們拿到的函數對象和特定STL算法中要接收的函數對象在參數上并不匹配,意思就是需要傳遞一個一元函數對象,你有一個二元函數對象,那可以通過綁定器提前綁定二元函數對象的其中一個參數,使得最終返回的是一個一元函數對象,那么從二元函數對象到一元函數對象的轉換過程,就需要綁定器去實現。

如STL中的泛型算法find_if,可用來查找可變長數組vector中符合某個條件的值(這個條件比如是要大于50,要小于30,要等于25等等)。其第三個參數需要傳遞一個一元函數對象,假如現在要找到第一個小于70的數,可將綁定器與二元函數對象結合,轉換為一元函數對象后傳遞給find_if。

我們知道系統自帶的greater()和less()模板類對象是二元匿名函數對象,所以需要通過綁定器將其轉換為一元函數對象,可以通過bind1st和bind2nd去綁定,顧名思義,前者對二元函數對象的第一個參數進行綁定,后者對二元函數對象的第二個參數進行綁定,兩個綁定器均返回一元函數對象,用法如下:

sort(vec.begin(), vec.end(), greater<int>()); //從大到小對vector進行排序 find\_if(vec.begin(), vec.end(), bind1st(greater<int>(), 70)); find\_if(vec.begin(), vec.end(), bind2nd(less<int>(), 70));

兩個綁定器分別提前綁定了一個參數,使得二元函數對象+綁定器轉換為一元函數對象:

operator()(const T &val) greater a > b ====> bind1st(greater<int>(), 70) ====> 70 > b less a < b ====> bind2nd(less<int>(), 70) ====> a < 70

下面給出bind1st綁定過程圖,二元函數對象綁定了第一個數為70,變為一元函數對象,傳遞給find_if泛型算法,此時find_if所實現的功能就是:找出有序降序數組中第一個小于70的數,所以find_if返回指向65元素的迭代器:

file:///Users/guochen/Notes/docs/media/16656563650484/16657214749366.jpg

以上就是綁定器的概念。因此需要綁定器的原因就很明顯了,綁定器可以返回一個轉換后的某元函數對象,用于匹配泛型算法。

根據上面的理解,接下來實現一下bind1st,代碼實現如下:

/*可以看到 自己實現的綁定器本質上也是個函數對象 調用operator()進行綁定*/ template<typename Compare, typename T> class \_mybind1st { public:\_mybind1st(Compare comp, T first) : \_comp(comp), \_val(first) {}bool operator()(const T &second) {return \_comp(_val, second);} private:Compare _comp;T _val; };/*實現bind1st 函數模板*/ //直接使用函數模板,好處是可以進行類型推演 template<typename Compare, typename T> _mybind1st<Compare, T> mybind1st(Compare comp, const T &val) { //綁定器返回值\_mybind1st為一元函數對象return _mybind1st<Compare, T>(comp, val); }

上述代碼中mybind1st綁定器第一個參數Compare comp是要綁定的二元函數對象,第二個參數val是在原有函數對象上綁定的值,最后綁定器調用_mybind1st模板函數對象的小括號運算符重載并返回該一元匿名函數對象,可以看到_mybind1st小括號運算符重載中已將綁定器mybind1st第二個參數val傳遞給了原本的二元函數對象Compare comp,因此原本綁定器接收的二元函數對象只需要處理第二個參數。所以綁定器返回的函數對象_mybind1st其實是在原本的函數對象上套了一層參數的新的函數對象,閱讀上面的代碼實現,就可更深刻的理解bind1st的底層原理。

與此同時,不難寫出bind2nd的實現,顧名思義該綁定器是對第二個參數進行綁定,不過多贅述,貼出實現代碼:

template<typename Compare, typename T> class \_mybind2nd { public:\_mybind2nd(Compare comp, T second) : \_comp(comp), \_val(second) {}bool operator()(const T &first) {return \_comp(first, _val);} private:Compare _comp;T _val; };template<typename Compare, typename T> _mybind2nd<Compare, T> mybind2nd(Compare comp, const T &val) {return _mybind2nd<Compare, T>(comp, val); }

根據上文,我們清楚了解到泛型算法find_if第三個參數接收一元函數對象,且該泛型算法功能是尋找第一個符合某條件的元素,我們對其補充實現,代碼貼出:

/** * 自己實現了find\_if后發現其實綁定器返回的就是綁定后的函數對象* 使用綁定器的目的:就是將原本某元的函數對象轉化為另一個元的函數對象* 說白了,綁定器還是對函數對象的一個應用**/ template<typename Iterator, typename Compare> Iterator my\_find\_if(Iterator first, Iterator last, Compare comp) {for(; first != last; ++first) {if(comp(*first)) { //調用comp的小括號運算符重載 一元函數對象 comp.operator()(*first)return first;}}return last; }

此時要尋找vector中第一個小于70的數,就可以這樣寫:

auto it = my\_find\_if(vec.begin(), vec.end(), mybind1st(greater<int>(), 70)); cout << *it << endl; //打印vec中第一個小于70的數值

以上,圍繞bind1st、bind2nd以及函數對象等,展開討論了綁定器bind1st、bind2nd的實現原理,但是同時我們也發現其缺點,就是只能對二元函數對象進行綁定轉換,讓其轉換為一元函數對象,那如果遇到很多元的函數對象,我們還得一個一個自己去實現嗎?所以將boost庫的boost::bind引入到了C++11標準庫中,接下來我們介紹C++11的綁定器std::bind,它是對上述兩種綁定器的泛化。支持任意函數對象(其實標準庫中最多支持29元函數對象,不過這也足夠使用了)。

補充:上面都是以函數對象為例,作為綁定器第一個參數傳遞,其實第一個參數可以是函數對象、成員函數、也可以是普通函數。

總結:綁定器本身是函數模板,綁定器第一個參數可能是普通函數、成員函數或函數對象等,返回的一定是函數對象。還有就是這兩個綁定器在C++17中已移除,因此僅用于學習和理解綁定器,也方便我們對C++11引入的bind的學習。至于當前這兩個綁定器如何實現對類成員函數的綁定等等我們也沒必要去尋找答案了(我一開始也在努力尋找如何使用這兩個綁定器去綁定類成員函數,但是發現bind可以很輕松地做到,當然如果大家知道怎么使用bind1st和bind2nd綁定類成員函數,也可以評論告知我,感謝~)。

C++11 bind通用綁定器(函數適配器)

我們可將bind函數看作是一個通用的函數適配器,它接受一個可調用函數對象,生成一個新的可調用函數對象來“適應”原對象的參數列表。bind相比于bind1st和bind2nd,實現了“動態生成新的函數”的功能。簡言之,可通過bind函數修改原函數并生成一個可以被調用的對象,類似于函數的重載,但是我們又不需要去重新寫一個函數,用bind函數就可以實現。相信在上面講bind1st和bind2nd時,大家對這些關于綁定器(函數適配器)的概念已經有所認知,我們直接看看如何用的吧。

綁定一個普通函數和函數指針

#include #include using namespace std; using namespace placeholders; int fun(int a, int b, int c, int d, int e) {return a + b - c + d - e; } int main() {int x = 1, y = 2, z = 3;auto g = bind(fun, x, y, _2, z, _1); //第一個參數&可省略 但最好寫成&funcout << g(11, 22) << endl; // fun(1, 2, 22, 3, 11) => 1+2-22+3-11// cout << bind(fun, x, y, \_2, z, \_1)(11, 22) << endl; //等價 }

g是有兩個參數的二元函數對象,其兩個參數分別用占位符placeholders::_2和placeholders::_1表示,_2代表二元函數對象的第二個參數22,_1代表二元函數對象的第一個參數11。這個新的可調用對象將它自己的參數作為第三個和第五個傳遞給fun,fun函數的第一個、第二個第四個參數分別被綁定到給定的值x、y、z上。

綁定一個類的靜態成員函數與綁定全局函數沒有任何區別,這里不做說明,可參考文章:[ 🔗 bind綁定器使用方法 ],該文章中bind詳細用法中描述了對靜態成員方法的使用。

綁定一個類成員函數

綁定器綁定一個成員函數時,我們知道非靜態成員函數第一個參數隱藏了一個this指針對象,所以綁定時綁定器第二個參數傳遞匿名類對象本身。bind和之前的bind1st、bind2nd一樣,最終返回的一定是函數對象,下面的代碼將一個五元函數綁定后,返回了一個三元函數對象,效果等同于調用f.operator()(10, 6, 7)。

#include #include using namespace std; using namespace placeholders; class Test { public:int func(int a, int b, int c, int d, int e) { return a + b - c + d - e; } };int main() {auto f = bind(&Test::func, Test(), _1, 12, _3, 5, _2);cout << f(10, 6, 7) << endl; //輸出:10+12-7+5-6 = 14cout << f.operator()(10, 6, 7) << endl; }

作為類成員函數,需要注意的一點是,如果是非靜態的成員函數,它會存在一個默認的this指針,靜態的成員函數則不存在this指針,所以在將其作為bind函數的參數時,需要注意使用this指針作為其中一個參數,當使用靜態成員函數作為參數時,其用法和全局函數類似,當參數為類內非靜態成員函數時,第一個參數必須使用&符號。

注:成為成員函數時,第一個參數之所以必須使用&符號,這部分原因可參考:[ 🔗 C++中普通函數指針與類成員函數指針的異同 ],文章中有說明具體原因。

以上就是C++11 bind的使用方法,衍生于bind1st、bind2nd,支持更多的參數綁定,關于bind函數更多的使用方法,也可參考C++Boost的說明文檔:[ 🔗 bind原理圖釋 ],該文章中的圖片方便我們對綁定過程的理解。

C++11 function機制

C++11的function機制是C語言中函數指針的衍生,用來實現回調功能,我們上面的綁定器通常都是以語句執行為單位,當出了某個語句的執行后,綁定器返回的這個函數對象也就隨之消失,因此需要有回調功能的function去長期保留綁定器返回的函數對象,以便在需要的時候隨時通過function機制調用即可。那有人會問,既然有函數指針,為什么還要再整出來一個function機制?這不是多此一舉嗎?答案肯定是:很有必要,因為function能做到的,函數指針未必能做到,接下來容我花點篇幅去說明為什么C++中有函數指針還需要std::function。

為什么C++中有函數指針還需要std::function?

C/C++中可以使用指針指向一段代碼,這個指針就叫函數指針,假設有這樣一段代碼:

#include int func(int a) { return a + 1; }int main() {int (*f)(int) = func;printf("%p\n", f);return 0; }

我們定義了一個函數func,然后使用指針變量f指向該函數,然后打印出變量f指向的地址,代碼很簡單,然后我們編譯一下,看下編譯后生成的指令,我們重點關注func函數:

int func(int a) {4005b6: 55 push %rbp4005b7: 48 89 e5 mov %rsp,%rbp4005ba: 89 7d fc mov %edi,-0x4(%rbp)return a + 1;4005bd: 8b 45 fc mov -0x4(%rbp),%eax4005c0: 83 c0 01 add $0x1,%eax }4005c3: 5d pop %rbp4005c4: c3 retq

可以看到,編譯好后的函數func位于地址0x4005b6這個地址,讓我們記住這個地址。然后運行一下編譯后生成的程序,想一想這段代碼會輸出什么呢?顯然應該是func函數的在內存中的地址!

[root@localhost 07]# ./a.out 0x4005b6

沒有猜錯吧,實際上函數指針本質也是一個指針,只不過這個指針指向的不是內存中的一段數據而是內存中的一段代碼,就像這樣:

看到了吧,我們常說的指針一般都是指向內存中的一段數據,而函數指針指向了內存中的一段代碼,在這個示例中指向了內存地址0x4005b6,在這個地址中保存了函數func的機器指令。

現在你應該明白函數指針了,細心的同學可能會有一個疑問,為什么編譯器在生成可執行文件時就知道函數func存放在內存地址0x4005b6上呢?這不應該是程序被加載到內存后開始運行時才能確定的嗎?

函數指針的作用是可以把一段代碼當做一個變量傳來傳去,主要的用途之一就是回調函數。關于回調函數其實是在A模塊定義,在B模塊被調用,就像這樣:

然而有時我們會有這樣的場景,我們依然需要在模塊A定義函數,同時函數A的運行需要依賴B模塊產生的數據,然后將模塊A定義的函數和模塊B產生的數據一并傳遞給C模塊來調用,就像這樣:

此時,單純的函數指針已經不夠用了,因為函數指針只是單純的指向了內存中的一段代碼,我們不但需要將內存中的一段代碼同時也需要將內存中的一塊數據傳遞給模塊C,此時你可以定義一個結構體,將代碼和數據打包起來,就像這樣:

typedef void (*func)(int);struct functor {func f;int arg; };

我們將這個結構體命名為functor,注意看,這個結構中有兩部分:

  • 一個指向代碼的指針變量
  • 一個保存數據的變量

這樣,我們在A模塊為指針變量賦值,在B模塊為保存數據的變量賦值,然后將此結構體傳遞給模塊C,模塊C中可以這樣使用:

void run(struct functor func) {func->f(func->arg); }

即,functor既包含了一段代碼也包含了這段代碼使用的數據,這里的數據也被稱為context,即上下文,或者environment,即環境,不管怎么稱呼,其實就是函數運行依賴的數據:

而這也正是C++中std::function的目的所在。

單純的函數指針并沒有捕捉上下文的能力,這里的上下文就是指代碼依賴的數據,你不得不自己動手構造出一個結構體用來存儲代碼依賴的上下文。在C++中你沒有辦法單純的利用函數指針指向對象的成員函數,就是因為函數指針沒有辦法捕捉this(指向對象的指針)這個上下文。

??注:std::function的作用本質上和我們剛才定義的結構體區別不大。

利用std::function你不但可以保存一段代碼,同時也可以保存必要的上下文,然后在合適的地方基于上下文調用這段代碼。


根據上文的介紹,我們也知道std::function相比函數指針的優勢所在,要去理解std::function,只需要理解上面提到的結構體即可。接下來我們來談談std::function的用法以及一步一步實現一個簡單的std::function,剖析其原理。

function的基本用法

接下來直接展示function的直觀用法,我們可以把function想象為一個模板類,調用該模板類的operator()()小括號運算符重載,執行封裝的函數指針,關于std::function具體實現細節,后續再繼續說明,函數指針可用于回調功能,函數對象也可用于回調功能,lambda表達式也可用于回調功能,甚至bind綁定適配后的成員函數也可用于回調功能,那么在不確定的情況下,通過function機制這樣的泛型機制統一表示,就會很方便。

普通函數:

void hello() {cout << "hello world!" << endl;} void hello\_str(string str) {cout << str << endl;} int main() {function<void()> func1 = &hello;// function func1(&hello); // 兩種調用方法均可func1(); //調用func1.operator()() ==> void hello()function<void(string)> func2 = &hello_str;func2("hello world"); //調用func2.operator()(string) ==> void hello\_str(string)return 0; }

模板函數:

template<typename T> T sum(T a, T b) { return a + b; } int main() {function<int(int, int)> func1 = sum<int>;//調用func1.operator()(int, int) ==> int sum(int, int);cout << func1(3, 5) << endl; //輸出8return 0; }

lambda表達式:

int main() {function<int(int, int)> func1 = [](int a, int b)->int { return a + b; };cout << func1(3, 5) << endl; //打印8 調用func1.operator()(int, int) ==> 調用lambda表達式返回求和結果return 0; }

函數對象:

class PrintAdd1 { public:void operator()(int left, int right) {cout << "sum : " << left + right << endl;} }; int main() {function<void(int, int)> func1 = PrintAdd1(); //調用默認無參構造函數創建匿名類對象給func1func1(3, 5); //func1.operator()(int, int) ==> 調用void PrintAdd1.operator(int, int)return 0; }

模板函數對象:

template<typename T> class PrintAdd2 { public:void operator()(T left, T right) {cout << "sum : " << left + right << endl;} }; int main() {function<void(int, int)> func1 = PrintAdd2<int>(); //調用默認無參構造函數創建匿名模板類對象給func1func1(3, 5); //func1.operator()(int, int) ==> 調用void PrintAdd2.operator()(int, int)return 0; }

類靜態成員函數:

class StaticClass1 { public:static void hello\_static(string s) {cout << s << endl;} }; int main() {function<void(string)> func1 = &StaticClass1::hello_static;func1("hello world"); //func1.operator()(string) ==> 調用void hello\_static(string)return 0; }

模板類靜態成員函數:

template<typename T> class StaticClass2 { public:static void hello\_static(T out) {cout << out << endl;} }; int main() {function<void(string)> func1 = &StaticClass2<string>::hello_static;func1("static.. hello world"); //func1.operator()(string) ==> 調用void StaticClass2::hello\_static(string)return 0; }

普通類成員函數:

class Test { public:void hello(string str) {cout << str << endl;} }; int main() {// function func = &Test::hello;// func(&Test(), "call Test::hello"); //這種第一個參數傳遞匿名對象的方法在GCC8.4下不可行 在vs2017下可行 不建議使用匿名對象Test test; //定義對象function<void(Test *, string)> func1 = &Test::hello;func1(&test, "call Test::hello"); //func1.operator(Test *, string) ==> 調用void Test::hello(string)return 0; }

模板類成員函數:

template<typename T> class Test2 { public:void hello(T str) {cout << str << endl;} }; int main() {Test2<string> test2;function<void(Test2<string> *, string)> func1 = &Test2<string>::hello;func1(&test2, "call template Test::hello"); //func1.operator(Test2 *, string) ==> 調用void Test2::hello(string)return 0; }

function底層原理剖析

對function用法有基本了解后,為了剖析function底層原理,我們還需知道模板的「特例化」以及「可變參數模板』,這里不再說明,可參考我以下兩篇博文,已經對模板特化和可變參數模板進行了解釋:

  • [ 🔗 模板全特化與偏特化的概念 ]
  • [ 🔗 泛化之美 —— C++11 可變參數模板的妙用 ]

function是C++11特有的一種比函數指針更靈活的機制,現在如果我們要接收一個hello函數,形如:

void hello(string str) { cout << str << endl; }

該如何實現呢?function利用了函數對象的手段,結合函數指針去調用小括號運算符重載實現,因此理所應當的實現是這樣的,內部有一個函數指針_pfunc,并且該函數指針在operator()小括號運算符重載重被調用:

//前向聲明模板類 template<typename T> class myfunction {};//單個類型參數模板完全特例化 template<typename R, typename A1> class myfunction<R(A1)> { public:using PFUNC = R (*)(A1); public:myfunction(PFUNC pfunc) : \_pfunc(pfunc) {}R operator()(A1 arg) {return \_pfunc(arg);} private:PFUNC _pfunc; };

當function對象接收hello函數時,R作為返回值會被推導為void,A1作為單一參數類型被推導為string類型:

myfunction<void(string)> f1 = &hello; f1("hello world"); //打印"hello world"

那現在如果我們要接收兩個參數的sum求和函數呢?

int sum(int a, int b) { return a + b; }

其實理解了function的原理后,這個時候要接收一個雙參數sum求和函數,可以再去特化一個適合sum的類,其中R推導為int,A1為sum的第一個參數類型int,A2為sum的第二個類型int:

#include using namespace std;int sum(int a, int b) { return a + b; }template<typename T> class myfunction {};//兩個類型參數模板完全特例化 template<typename R, typename A1, typename A2> class myfunction<R(A1, A2)> { public:using PFUNC = R (*)(A1, A2); public:myfunction(PFUNC pfunc) : \_pfunc(pfunc) {}R operator()(A1 arg1, A2 arg2) {return \_pfunc(arg1, arg2);} private:PFUNC _pfunc; };int main() {myfunction<int(int, int)> f2 = &sum;// myfunction f2(&sum);cout << f2(3, 4) << endl; // 輸出5return 0; }

以上就是function去接收單參數和雙參數時的實現,但是這有個很致命的缺點,如果要接收三個參數、四個參數、十個參數、一百個參數、一千個參數呢?(當然這不太可能,就是單純去考慮這種情況),那是不是還得對不同參數都進行一次實現?那模板的意義何在?如何消除代碼冗余就是問題所在,我們需要用到可變模板參數,我的這篇文章已經說明什么是可變參數模板,如何去使用它:[ 🔗 泛化之美 —— C++11 可變參數模板的妙用 ]

所以通過可變模板參數,我們去實現一個可變參數的function,該function可以接收任意數量參數的函數、函數對象、lambda表達式、bind適配后的成員函數和普通函數等等:

template<typename T> class myfunction {};/*那如果類型參數多了,我們還要一個一個定義嗎??其實可以采用變長參數模板實現*/ // 可變參數模板完全特例化 template<typename R, typename... A> class myfunction<R(A...)> { public:using PFUNC = R (*)(A...); public:myfunction(PFUNC pfunc) : \_pfunc(pfunc) {}R operator()(A... arg) {return \_pfunc(arg...);} private:PFUNC _pfunc; };

根據以上實現,我們對function的底層原理有了深刻的認識,能夠自己實現一個接收任意參數的function模板類。雖然以上實現和標準庫還差得很遠,但是起到了學習、理解的作用吧。

總結

本文通過C++11之前的bind1st和bind2nd引入,介紹了C++11的bind的使用,理清了它的作用,何謂“綁定”?然后介紹了function的使用方法,并對其進行了邏輯上的實現,以上這些知識點都挺難的,涉及函數對象、模板特化、可變參數模板。但是也算是一次系統性總結吧,感覺意義蠻大的。C++11的路還很遠,以后有機會再繼續深耕吧。

順便記錄一下,我還在為自己的秋招迷茫中,如果有好消息,我在回來還愿!

總結

以上是生活随笔為你收集整理的C++11绑定器bind及function机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

伊人春色电影网 | 亚洲 欧洲av| 日韩精品久久久久久中文字幕8 | 国产亚洲综合性久久久影院 | 欧美大片在线观看一区 | 国产一区视频在线观看免费 | 欧美另类一二三四区 | 免费热情视频 | 伊人婷婷综合 | 手机成人在线 | 中文乱码视频在线观看 | 日韩一区正在播放 | 五月天婷婷狠狠 | 特级毛片在线 | 色婷婷骚婷婷 | 国产 一区二区三区 在线 | 亚洲精品视频播放 | 青青草在久久免费久久免费 | 国产人成精品一区二区三 | 中文字幕视频观看 | 亚洲精品乱码久久久久久蜜桃动漫 | 国产中文欧美日韩在线 | 欧美日韩视频在线 | 成人免费观看视频网站 | 国产精品久久久久久久久搜平片 | 日韩三级视频 | 91天堂影院 | 91视频久久久久久 | 久久精品一区二 | 伊人伊成久久人综合网站 | 国产大片免费久久 | 国产成人精品综合久久久 | 国产三级午夜理伦三级 | a在线观看免费视频 | 国产精品专区h在线观看 | 亚洲精品在线视频网站 | 91精品国产麻豆国产自产影视 | 国产精品五月天 | 99九九视频 | 欧美一级乱黄 | 色综合色综合久久综合频道88 | 91麻豆精品国产午夜天堂 | 天天插天天爱 | 亚洲激情中文 | 99精品欧美一区二区蜜桃免费 | 人人讲下载 | 69国产精品视频 | 日本久久久久久久久久 | 99视频在线观看免费 | 久草网站| 成人av电影免费观看 | av蜜桃在线 | 91天天视频 | 亚洲视频电影在线 | 怡春院av| 97人人模人人爽人人喊中文字 | 国产综合精品一区二区三区 | 久久午夜电影院 | 在线你懂 | 在线 欧美 日韩 | 亚洲精品视频网站在线观看 | 欧美99精品| 久久天天躁夜夜躁狠狠85麻豆 | 国产亚洲成av人片在线观看桃 | 99久久99热这里只有精品 | 97在线免费视频观看 | 亚洲黄色在线 | 国产分类视频 | 亚洲毛片一区二区三区 | 人人澡人摸人人添学生av | 色婷婷亚洲精品 | 日韩精品高清视频 | 美女一级毛片视频 | 午夜99| 高清av中文在线字幕观看1 | 欧美成人xxx| 五月天六月婷 | 天天干天天干天天色 | 91视频电影 | 国产99中文字幕 | 这里有精品在线视频 | 右手影院亚洲欧美 | 一区二区三区福利 | 国产三级国产精品国产专区50 | 久久久久久久国产精品视频 | 国产在线91在线电影 | 深爱婷婷久久综合 | 在线观看v片 | 国产精品12 | 免费进去里的视频 | 色婷婷久久久 | 国产视频1区2区 | 91久久精品一区二区三区 | 日日摸日日碰 | 五月激情电影 | 亚洲人成人天堂h久久 | 黄色不卡av | 开心激情五月婷婷 | av7777777| 在线观看日韩免费视频 | 日韩精品久久一区二区 | 午夜一级免费电影 | 永久免费精品视频网站 | 97av视频在线观看 | 超碰av在线播放 | 男女啪啪免费网站 | 日韩大片在线免费观看 | 精品国产乱码一区二 | 在线播放日韩av | 97精产国品一二三产区在线 | 亚洲综合导航 | 欧美日韩伦理一区 | 99欧美精品 | 国产视频一区精品 | 三级在线国产 | 国产成人黄色片 | 亚洲视频第一页 | 99精品在这里 | 青青河边草免费直播 | www.亚洲视频.com | 国产99久久久国产 | 日韩电影在线一区二区 | 午夜久久影院 | 成人免费在线视频观看 | 国产一区二区电影在线观看 | 亚洲九九九在线观看 | 热re99久久精品国产66热 | 亚洲涩综合 | 色偷偷88888欧美精品久久久 | 四虎国产精品成人免费影视 | 国产一级免费在线观看 | 97国产一区二区 | 成人黄色片免费 | 成人av片在线观看 | 又长又大又黑又粗欧美 | 国产精品日韩欧美 | 午夜精品影院 | 天天操夜夜叫 | 久久久久激情 | a电影免费看 | 视频二区在线视频 | 欧洲一区精品 | 日日干夜夜操视频 | 中文字幕精品一区 | 综合久久婷婷 | 国产一区二区电影在线观看 | 丁香五月网久久综合 | 欧美综合在线视频 | 人人玩人人添人人澡超碰 | 日韩高清一 | 欧美日韩不卡在线观看 | 中文字幕精品一区久久久久 | 91精品国产91久久久久 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 人成午夜视频 | 免费看黄网站在线 | 成人蜜桃 | av高清网站在线观看 | 久久99久久精品国产 | 人人狠狠综合久久亚洲婷 | 麻豆精品视频 | 狠狠色丁香婷婷综合 | 日韩免费在线观看视频 | 久久人人爽爽人人爽人人片av | 久久www免费视频 | 欧美小视频在线 | 中文字幕黄色av | 欧美一区二区三区免费看 | 中文字幕网站视频在线 | 久久久久免费网 | 亚洲综合一区二区精品导航 | 国产专区免费 | 精品福利网 | 天天激情天天干 | 五月天色婷婷丁香 | 色婷婷丁香 | 国产精品去看片 | 中文视频在线播放 | 欧美另类人妖 | 中文字幕高清视频 | 亚洲自拍偷拍色图 | 精品欧美乱码久久久久久 | 亚洲精品综合欧美二区变态 | 99色99| 亚洲午夜精 | 色婷婷精品大在线视频 | 摸阴视频 | 日本黄区免费视频观看 | 国产精品mv | 国产亚洲精品久久久久久网站 | 97免费中文视频在线观看 | 伊人国产在线播放 | 日日夜夜精品视频天天综合网 | 福利视频入口 | 丝袜美女在线 | 亚洲国产成人在线 | 国产97在线视频 | 中文字幕网站 | 狠狠色丁香婷婷综合久小说久 | 成年人视频在线观看免费 | 日韩高清在线不卡 | 又黄又爽又色无遮挡免费 | 不卡视频一区二区三区 | 91福利社在线观看 | 日日摸日日碰 | 五月天视频网站 | 在线免费观看一区二区三区 | 国产91小视频 | 久久久午夜剧场 | 亚洲v欧美v国产v在线观看 | 亚洲黄色小说网址 | 成人av亚洲 | 日日干美女| 欧美黑人性猛交 | 欧美日韩三级在线观看 | 免费精品在线观看 | 欧美亚洲另类在线视频 | 国产精品免费观看视频 | 综合亚洲视频 | 国产麻豆成人传媒免费观看 | 免费a网址 | 国产色视频123区 | 亚洲欧洲一区二区在线观看 | 在线看一级片 | 夜夜骑日日操 | 丝袜网站在线观看 | 久久亚洲综合色 | 在线成人观看 | 日韩在线电影一区二区 | 99久久精品久久亚洲精品 | 日韩高清不卡一区二区三区 | 一区二区三区四区五区在线 | 五月天国产 | 在线观看网站你懂的 | 日韩丝袜在线 | 亚洲精品在线观看免费 | 成人在线视 | 美女免费视频网站 | 色网站国产精品 | 九九九九精品 | 成人免费看片网址 | 欧美一级日韩免费不卡 | 就要干b | 国语久久 | 亚洲国产欧美在线看片xxoo | 黄色国产区 | 亚洲观看黄色网 | 中文字幕日本在线观看 | 国产午夜精品久久久久久久久久 | 国产日韩欧美综合在线 | 99爱精品视频 | 黄色免费观看网址 | 波多野结衣一区二区三区中文字幕 | 成人毛片一区二区三区 | 操操操日日 | 日韩激情av在线 | 一区二区 不卡 | 天天插天天干天天操 | 91色国产| 97天天干| 国产在线精 | 精品亚洲免费视频 | 开心色激情网 | 亚洲精品乱码白浆高清久久久久久 | 在线观看午夜av | 国产1级视频 | 日韩av中文字幕在线 | 欧美精品在线一区二区 | 国产女做a爱免费视频 | 四虎成人精品永久免费av | 国产精品婷婷午夜在线观看 | 伊人国产视频 | 国产精品久久久久久999 | 国产一区欧美日韩 | 日韩中文字幕免费在线观看 | 久久中文字幕在线视频 | 91在线播放视频 | 免费涩涩网站 | 免费电影一区二区三区 | 国产不卡在线观看 | 色六月婷婷 | 成人福利av | 日韩在线观看av | 久久久综合 | 国产成人在线免费观看 | 一二三区在线 | 亚州欧美视频 | 国产精品尤物视频 | a√资源在线 | 日日操天天操夜夜操 | www黄com| 日韩av视屏在线观看 | 久草在线资源观看 | 日本aa在线 | 人人爱爱 | 色的网站在线观看 | av超碰免费在线 | 欧美极品在线播放 | 日本在线观看中文字幕无线观看 | 人人爱人人爽 | 麻豆高清免费国产一区 | 日韩高清激情 | 久久 在线| 黄色成年网站 | 日日夜夜狠狠 | 国产一卡在线 | 国产一区二区视频在线播放 | 欧美视频在线观看免费网址 | 夜夜高潮夜夜爽国产伦精品 | 91精品国产高清自在线观看 | 国产精品久久伊人 | 日韩和的一区二在线 | 国产精品原创在线 | 97在线看 | 国产一区二区在线播放视频 | 国产精品v a免费视频 | 特黄免费av | 国产精品久久久亚洲 | av中文资源在线 | 日韩精品视频免费在线观看 | 国产激情免费 | 国产一在线精品一区在线观看 | 一级做a爱片性色毛片www | 精品国产1区2区3区 国产欧美精品在线观看 | 草在线| 日韩在线高清视频 | 亚洲九九| 午夜色性片 | 国产一二区视频 | 人人爽人人爽 | 久久久久久久久久久网站 | 国产黄a三级 | 成人午夜在线电影 | www.天天色 | 午夜精品久久久久久 | 精品国产精品国产偷麻豆 | 日韩欧美视频在线免费观看 | 激情综合六月 | 欧美精品免费在线观看 | 99精品在线免费 | 色婷婷综合久久久中文字幕 | 国产精品成人一区二区 | 婷婷六月久久 | 91亚洲精品久久久中文字幕 | 日日夜夜国产 | 国产一卡久久电影永久 | 国产精品免费观看久久 | 国产欧美日韩精品一区二区免费 | 91精品国产自产91精品 | 中文字幕欧美激情 | 天天草天天操 | 最近中文字幕视频完整版 | 久久一及片 | 丰满少妇在线观看 | 超碰久热 | 午夜免费福利视频 | 免费av在线网站 | 久久视频免费在线观看 | 在线小视频你懂的 | www日韩视频 | 亚洲美女视频在线 | 日本69hd| 狠狠操欧美 | 99精品偷拍视频一区二区三区 | 99国内精品久久久久久久 | 三级av网| 亚洲精品在线观看中文字幕 | 黄色大片日本免费大片 | 久久字幕精品一区 | 91成人短视频在线观看 | 亚洲国产欧美在线人成大黄瓜 | 国产裸体视频bbbbb | 91黄色视屏| 丁香午夜| 97福利在线 | 天天爱天天 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 91网在线| 免费久久精品视频 | 久草影视在线观看 | 91视频高清完整版 | 成人免费网站视频 | 色丁香综合 | 9999激情| 韩日精品在线观看 | 中文字幕在线观看免费高清电影 | 视频二区在线 | 超碰999| 97精品超碰一区二区三区 | 午夜在线观看 | 久久久久久久久久免费 | 国产日韩精品在线观看 | 国产一级黄色av | 超碰人人国产 | 免费av大片 | 91高清不卡| 欧美日韩中文字幕在线视频 | 91福利社在线观看 | 国产精品国产三级国产不产一地 | 99久久999久久久精玫瑰 | aa级黄色大片 | 一区二区三区动漫 | jizz18欧美18| 国产精品毛片久久蜜 | 免费在线观看av不卡 | 欧美天天综合网 | 麻豆视传媒官网免费观看 | 日韩精品一区二区三区高清免费 | 久久综合福利 | 中文字幕资源网 国产 | 久久av不卡| 亚洲乱亚洲乱妇 | 激情亚洲综合在线 | 干干操操 | 日韩偷拍精品 | 中文在线a√在线 | 怡红院av久久久久久久 | 在线观看视频精品 | 麻豆av电影 | 91男人影院 | 超碰97人 | 综合色中色 | 最近高清中文字幕在线国语5 | 免费福利在线播放 | 国产亲近乱来精品 | 黄色1级大片| 日韩中文字幕在线看 | av中文字幕网站 | 亚洲精品乱码久久久久久写真 | 操操操av | 最新国产精品视频 | 欧美男同网站 | 亚洲精品国产自产拍在线观看 | 日本福利视频在线 | 国产第一页在线观看 | 一区在线电影 | 天天操天 | 91在线超碰| 在线观看视频免费播放 | 亚洲午夜精品电影 | 国产日产精品一区二区三区四区的观看方式 | 91视视频在线直接观看在线看网页在线看 | 欧美一区二区日韩一区二区 | 免费看国产一级片 | 久草在线在线精品观看 | 久久综合九色欧美综合狠狠 | 精品国产一区二区三区久久久蜜臀 | 国产一区91 | 99精品视频一区 | 肉色欧美久久久久久久免费看 | 天天激情站 | 国内小视频在线观看 | 黄色三级免费看 | 日韩亚洲国产精品 | 日韩黄色一级电影 | 综合网五月天 | 91高清免费在线观看 | 黄色免费观看网址 | 五月婷婷操 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 国产精品一区二区免费 | www.色午夜,com | 国产一级做a| 狠狠网 | 日韩在线中文字幕视频 | 欧美一二三在线 | 国产精品永久久久久久久www | 久久成人国产精品一区二区 | 激情伊人五月天久久综合 | 国产成人黄色av | 色婷婷狠狠五月综合天色拍 | www.亚洲精品在线 | 精品国产免费人成在线观看 | 在线播放你懂 | 少妇性aaaaaaaaa视频 | 国产免费高清视频 | 日日夜夜中文字幕 | 久草在线久草在线2 | 全黄网站| 亚洲h在线播放在线观看h | 一区二区三区在线影院 | 天天干天天操天天拍 | 夜夜躁狠狠躁日日躁视频黑人 | 国产精品国产亚洲精品看不卡 | 看黄色91| 西西444www | www.888.av| 7777xxxx | 四虎伊人 | 日韩欧美在线不卡 | 一级片免费观看视频 | 在线a亚洲视频播放在线观看 | 婷婷五月在线视频 | 中文字幕欧美激情 | 99久久婷婷国产一区二区三区 | 在线视频 日韩 | 精品视频久久久 | 日韩电影在线一区二区 | 久久视频免费在线 | 97色视频在线| 日批在线看 | 黄色软件在线看 | 最近中文字幕在线中文高清版 | 日韩在线视频在线观看 | 精品国产一区二区三区四 | 天天插天天 | 国产在线精品播放 | 夜夜爱av | 久爱精品在线 | 久久精品视频99 | 日韩高清在线一区二区 | 国产日韩在线播放 | 日韩精品一区二区三区三炮视频 | 国产精品久久久久久久av电影 | 97超在线视频 | 成人免费观看视频网站 | 日韩欧美一区二区三区视频 | 成av在线 | 成人a在线观看 | 亚洲自拍自偷 | 黄色三级网站在线观看 | 久久久久国产一区二区三区四区 | 西西44人体做爰大胆视频 | 国产精品 999| 91看片麻豆 | 国产亚洲欧美在线视频 | 91超国产 | 国产视频1区2区 | 激情狠狠干 | 黄色a在线| 玖玖视频免费在线 | 中文字幕第 | 免费av视屏 | 又黄又刺激的网站 | 高清av网站 | 日韩系列| 亚洲天堂激情 | 久久精品国产亚洲精品2020 | 九色精品在线 | 中文字幕观看在线 | 久久国产女人 | 国产欧美日韩视频 | 精品国产自在精品国产精野外直播 | 五月婷婷影视 | 精品久久久国产 | 国产精品对白一区二区三区 | 国际精品久久 | 亚洲理论电影 | 中文字幕免费高清av | 欧美日韩激情视频8区 | 欧美大香线蕉线伊人久久 | 色中色资源站 | 免费高清无人区完整版 | 国产原创av片 | 久精品视频在线观看 | 五月天色站 | 婷婷伊人综合亚洲综合网 | 久久成人黄色 | 99r在线 | 亚洲资源网 | 成年人电影免费在线观看 | 亚洲国产精品va在线看 | www.五月天婷婷 | 天天躁日日躁狠狠躁 | 91精品国产成人www | 成人av电影免费在线播放 | 国产精久久 | 亚洲欧美一区二区三区孕妇写真 | 97精品国产97久久久久久 | 亚洲视频在线看 | 99久久国产免费看 | 97精品欧美91久久久久久 | 国产精品va在线观看入 | 久久免费视频播放 | 一区二区三区免费在线观看 | 亚洲精品色视频 | 国产午夜免费视频 | 91最新在线视频 | 黄色成人在线 | 国产精品久久久久永久免费观看 | av一本久道久久波多野结衣 | 久久精品视频国产 | 国产精品正在播放 | 天天在线操 | 热久久这里只有精品 | 精品国产综合区久久久久久 | 国产色网 | 五月婷婷在线观看视频 | 天天操比 | 久久精品国产v日韩v亚洲 | 97视频网站 | 国产精品久久久久一区二区三区共 | 欧美极度另类性三渗透 | 欧美一区二区伦理片 | 久久久久久久久久久久久国产精品 | 日本精品一区二区在线观看 | 亚洲人成综合 | 色婷婷亚洲综合 | 日本成人免费在线观看 | 国产一区二区三区视频在线 | 超碰激情在线 | 国产精品一区二区精品视频免费看 | 三日本三级少妇三级99 | 天天婷婷 | 国产精品不卡视频 | 国产色影院 | 91九色国产蝌蚪 | 日本一区二区三区视频在线播放 | 国产在线观看a | 亚洲精品小区久久久久久 | www.97色.com| 日本久久电影 | 91精品国自产在线观看欧美 | 97在线精品视频 | 成人午夜剧场在线观看 | 亚洲在线精品视频 | 99久久精品免费看国产麻豆 | 国产精品久久久久久久久久99 | 欧美aa一级| 成 人 免费 黄 色 视频 | 亚洲精品av在线 | 97香蕉久久超级碰碰高清版 | 在线黄网站 | 日韩欧美在线视频一区二区三区 | 九九免费观看全部免费视频 | 九九热在线视频 | 精品久久久网 | 在线播放亚洲 | 日韩欧美在线免费观看 | 久久久久久精 | 操操综合网 | 91av观看| 中文字幕一区二区三 | 亚洲精品黄网站 | 欧美精品xxx | 日韩免费在线观看视频 | 国产一区二区三区网站 | 狠狠色丁香久久婷婷综合丁香 | 色搞搞 | 日韩av成人在线观看 | 99精品在线观看 | 亚洲日本在线视频观看 | 蜜桃视频在线视频 | 午夜三级在线 | 久久黄色网页 | 亚洲美女视频在线 | 婷婷激情综合五月天 | 亚洲成av人片在线观看香蕉 | 国产亚洲精品久久久久久电影 | 国产精品久久久久久一二三四五 | 亚洲午夜精品一区二区三区电影院 | 三上悠亚一区二区在线观看 | 五月综合激情网 | 成人精品在线 | 欧美大香线蕉线伊人久久 | 日本黄色免费网站 | 五月激情在线 | 中文有码在线视频 | 久久久综合香蕉尹人综合网 | 亚洲精品国产品国语在线 | 国产精品一区二区久久精品 | 亚洲黄色免费在线 | 久久免费视频这里只有精品 | 韩国av在线| 免费成人在线视频网站 | 国产成人一区二区三区在线观看 | 91精品视频免费在线观看 | 精品专区一区二区 | 国产96精品| 最近2019好看的中文字幕免费 | 在线免费高清视频 | 国产亚洲情侣一区二区无 | 国内综合精品午夜久久资源 | 欧美日韩免费在线视频 | 麻豆系列在线观看 | 日本中文字幕在线视频 | 婷婷四房综合激情五月 | 日韩三级视频 | 最近中文字幕在线中文高清版 | 一区二区三区三区在线 | 婷婷在线观看视频 | 三级黄色a | av 一区 二区 久久 | 超碰人人草 | 日韩综合在线观看 | 四虎成人精品在永久免费 | 国产综合精品一区二区三区 | 色综合久久久久综合 | 国产一级片在线播放 | 成人三级视频 | 在线成人免费电影 | 成人免费看片网址 | 在线之家免费在线观看电影 | 992tv在线观看 | 欧美一级网站 | 久久精品牌麻豆国产大山 | 九九色综合 | 永久av免费在线观看 | 337p日本欧洲亚洲大胆裸体艺术 | 五月婷婷网站 | 亚洲欧洲国产精品 | 国内精品福利视频 | 国产精品九九视频 | 一区电影 | 国产成人久久77777精品 | 久草视频在线资源 | 久草在线视频首页 | 色综合小说 | 欧美日韩国产伦理 | 亚洲一区二区黄色 | 久久成年人 | 成人av电影在线观看 | 久久久久久久久久影院 | 国产免费久久av | 一级片免费观看 | 色久五月 | 国产精品一区二区 91 | 亚洲精品国产精品乱码在线观看 | 麻豆影视网站 | 亚洲精品电影在线 | 久久精品激情 | 在线观看日韩专区 | 免费热情视频 | 丁香九月激情综合 | 91免费高清视频 | 亚洲久草网 | 国产午夜小视频 | 丝袜美腿av | 免费亚洲黄色 | 丁香资源影视免费观看 | 国产精品一区二区三区四 | 99爱视频| 亚洲精品乱码白浆高清久久久久久 | 99高清视频有精品视频 | 成人黄色电影在线播放 | 国产精品久久久久久久婷婷 | 成人一区二区在线 | 免费国产视频 | 黄色三级免费观看 | 亚洲精品视频在 | www国产亚洲精品久久麻豆 | 免费国产在线观看 | 久久五月天色综合 | 国产精品久久久久久久久久久久久久 | 狠狠操狠狠 | 激情影音| 97爱 | 成人av高清在线 | 亚洲国产黄色片 | 伊人久久国产 | 日韩一区二区免费播放 | 日韩成人精品在线观看 | 久精品视频免费观看2 | 成人黄色电影在线 | 91福利视频网站 | 国产又粗又猛又黄又爽 | 色综久久| 日日爽夜夜操 | 六月丁香激情综合色啪小说 | 中文字幕一区三区 | 91丨九色丨高潮 | 午夜影视剧场 | 丰满少妇一级 | 国产日产精品一区二区三区四区 | 人人爽人人搞 | 午夜av一区二区三区 | 色视频网站免费观看 | 久久a热6| 91av欧美| 四虎最新入口 | 99视频+国产日韩欧美 | 99 精品 在线 | 天天综合网入口 | 丁香激情网 | 久久免费在线视频 | 在线色吧 | 91在线国内视频 | 婷五月激情 | 久久艹99| 天天干天天操天天爱 | 在线国产精品视频 | 中文字幕在线观看日本 | 中文在线中文资源 | av电影一区二区三区 | 欧美激情第一页xxx 午夜性福利 | 亚洲激色 | 97成人在线观看 | 免费日韩三级 | 亚洲精品在线观看网站 | 99久久精品久久亚洲精品 | 9幺看片| 五月婷婷中文网 | 久久久久久欧美二区电影网 | 日韩美一区二区三区 | 天天爽综合网 | 欧美永久视频 | 日b视频国产 | 久久久久久毛片 | 黄色免费在线看 | 9在线观看免费高清完整 | 日韩一二三在线 | 免费黄色网址网站 | 午夜久久 | 在线免费观看国产视频 | 精品视频免费观看 | 人人看黄色| 99亚洲天堂| 免费亚洲精品 | 在线视频在线观看 | 成年人在线观看 | 亚洲国产精品成人女人久久 | 亚洲男男gaygay无套同网址 | 日本3级在线观看 | 色婷婷综合久久久久中文字幕1 | 热久久免费国产视频 | 午夜精品一区二区国产 | www.超碰97.com | 一区二区三区电影在线播 | 中文字幕在线视频一区 | av中文在线影视 | 天天操天天干天天 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 免费久久网站 | 国内精品视频在线播放 | 久久激情精品 | 欧美日韩精品区 | 中文字幕成人在线观看 | 国产精品孕妇 | 国产精品一区二区三区免费视频 | 狠狠地操 | 91激情在线视频 | 日韩a在线看 | 久久久精品欧美一区二区免费 | 91精品国自产在线 | 伊人午夜视频 | 伊人首页 | 91完整版观看 | 五月婷婷视频在线 | 欧美精品久久久久久久久老牛影院 | 在线视频麻豆 | 亚洲精品乱码久久久久久蜜桃动漫 | 综合在线亚洲 | 波多野结衣一区二区 | 亚洲激精日韩激精欧美精品 | 国产免费精彩视频 | 免费久久99精品国产 | 久久情侣偷拍 | 欧美日bb| 午夜精品久久久久久久久久久 | 在线亚洲午夜片av大片 | 超碰在线中文字幕 | 色av资源网 | 狠狠狠狠狠狠狠狠 | 成人免费在线播放 | 狠狠躁日日躁狂躁夜夜躁 | 99国产精品 | 国产亚洲精品久久久久久网站 | 九色视频自拍 | 欧美最猛性xxxx | 一级黄色大片在线观看 | 99激情网 | 蜜臀av一区二区 | 国产婷婷vvvv激情久 | 日本精品一二区 | 久久久免费毛片 | 久久99在线观看 | 91精品久久久久久久久 | 天天玩天天干 | 91av视频在线免费观看 | 欧美一级xxxx| 国产精品麻豆91 | 最新久久免费视频 | 亚洲精品在| 免费黄色av片 | 五月婷网站 | 日日夜夜网站 | 色五月情 | 一区二区激情视频 | 91传媒免费观看 | 亚洲视屏| 99精品视频精品精品视频 | 色欧美成人精品a∨在线观看 | 久久成人免费 | 中文 一区二区 | 日韩精品视| 日本精品午夜 | 国产夫妻自拍av | 精品中文字幕视频 | 亚洲精品国产麻豆 | 日本大片免费观看在线 | 久久er99热精品一区二区 | 国产中的精品av小宝探花 | 在线视频一区二区 | 91精品久久久久久久久久久久久 | 在线观看免费观看在线91 | 国产午夜三级一区二区三 | 一区在线观看 | 一级国产视频 | 亚洲国产精彩中文乱码av | 99这里都是精品 | 超碰免费av | 在线观看国产v片 | 欧美在线aa | 天天爽天天爽 | 日本久久成人中文字幕电影 | 日韩videos | www.久久91| 国产精品99久久久久久武松影视 | 福利久久久 | 成人禁用看黄a在线 | 色婷婷啪啪免费在线电影观看 | 人人射人人插 | 久久久久网址 | 精品国产一区二区三区久久久 | 亚洲黄色免费在线看 | 国产精品久久久一区二区三区网站 | 韩日精品在线观看 | 在线观看免费视频你懂的 | 久久黄色片 | 91手机在线看片 | 国产成人精品日本亚洲999 | 在线草 | 99色婷婷| 久久久免费 | 日韩精品免费 | 狠狠色香婷婷久久亚洲精品 | 免费成人在线网站 | 丁香婷婷成人 | 麻豆激情电影 | 91女人18片女毛片60分钟 | 国产一级免费视频 | 欧美作爱视频 | 欧美激情操 | 一区二区三区www | 日本精品va在线观看 | 在线国产一区 | 狠狠狠色丁香婷婷综合久久五月 | 国产精品一区二 | 草在线视频 | 精品国产一区二区三区男人吃奶 | 国产高清精 | 色在线视频网 | 久久国产精品99久久久久久进口 | 亚洲色图美腿丝袜 | 欧美性大战久久久久 | 91av观看| 国产偷v国产偷∨精品视频 在线草 | 欧美一区免费观看 | 中文字幕日韩伦理 | 色久av| 日韩最新在线视频 | av在线电影网站 | 91超碰在线播放 | 在线成人中文字幕 | 久久久久欠精品国产毛片国产毛生 | 视频99爱| 久久超碰免费 | 国产精品99久久久精品免费观看 | 日韩精品在线免费播放 | 99精品国产一区二区三区麻豆 | 免费国产视频 | 一区二区视 | 久久久亚洲精品 | 国产成人免费观看久久久 | 激情丁香综合 | 日本一区二区三区视频在线播放 | 日韩精品一区二区三区丰满 | 中文字幕精品一区二区精品 | 精品久久电影 | 久草精品视频在线观看 | 在线视频精品 | 免费中文字幕视频 | 粉嫩aⅴ一区二区三区 | 99热99热 | 国产专区在线播放 | 欧美激情视频一二区 | 91av在线免费 | 网站你懂的 | 97超碰色偷偷 | 久久久精品网站 | 精品免费在线视频 | 午夜性生活 | 久久人人97超碰com | 国产区免费在线 | 久久久午夜精品理论片中文字幕 | 久射网 | 国产色资源| 国产成人精品久 | 日韩欧美在线视频一区二区三区 | 黄色三级在线观看 | 国产精久久久久久久 | avsex| 91香蕉视频黄色 | 国产成视频在线观看 | 99久久日韩精品免费热麻豆美女 | 97香蕉久久国产在线观看 | 毛片888| 日b视频国产 |