精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

詳解C++用戶自定義轉換過程

開發 后端
今天我們要討論的是C++的轉換方式,這樣的轉換方式跟C語言有所不同,C++是面向對象的語言,有類的概念,因此讓又多一層需要理解的內容。

在計算機語言中,類型的存在讓我們可以更有針對性的進行數據和功能的處理,但是卻又存在了類型轉化的問題。C++如同其他計算機語言一樣,也同樣都這些問題。不過它相對于C而言多了引用類型(Reference);相對與C#來講,又多了指針類型(Point)。這似乎讓它的類型轉化變得更加撲朔迷離。

也許是C方面知識的延續,我對C++的基礎類型之間的轉換還算比較清楚的,但是由于C#的Convert這個類庫是那么的好用,以至于我一直不太適應C++的轉換方式。不過經過導師的教授,發現C++的也可以構建禇類似Convert的轉換方式。

在導師經過一堂課關于C++類型轉換的課后,我又在網上查閱相關資料,以便更清晰詳細的總結C++在類型轉換的方式。

傳統轉換方式(Traditional Type-Casting)

C++作為C語言的超集,完全繼承了C語言所具有的類型轉換方法和能力,因此對于這部分在基礎數值類型上的轉換是比較容易理解的。但是因為C++是面向對象的語言,有類的概念,因此讓又多一層需要理解的內容。

隱式轉換 (Implicit Conversion)

隱式轉換不需要任何轉換運算符,編譯器會自動根據類型兼容性進行不同類型之間的轉換。一般情況下,在C/C++中這種轉換多出現在基本數值類型上,其基本原則就是所需內存小的類型可以直接轉換成內存大相同的或者。

內存大小相同的類型之間也可以互相轉換,但是得到的結果可能不是預期的,因而可能會得到編譯器的警告。比如 unsigned int uintVariable = -1; 。

雖說:程序員只在意錯誤(Error),不關心警告(Warning),但是導師也是嚴令禁止在程序中出現的,所以對于這樣的隱式轉換也會盡量避免。

顯示轉換 (Explicit Conversion)

顯示轉換要表明所要轉換的目標對象是什么樣的類型,然后編譯器會做出轉換,它有兩種格式:

C語言格式(C-like Cast) (new_type) expression

函數式(Function-style Cast) new_type (expression)

示例代碼

  1. #include <iostream>using namespace std;      
  2. int main() {int x0 = 100;      
  3. float num0 = x0;      
  4. float num = 98.76;      
  5. int x1 = (int) num;      
  6. int x2 = int(num);          
  7. cout << "num0 = " << num0 << endl;      
  8. cout << "x1 = " << x1 << endl;      
  9. cout << "x2 = " << x2 << endl;      
  10. cout << "x3 = " << x3 << endl;} 

對于C++的類而言,也可以在其實例對象上使用傳統的類型轉換

這是利用了C++的一些語言特性。

下邊就以例子來做解釋

代碼

  1. #include<iostream>  
  2. #include<string>  
  3. using namespace std;  
  4. //macro definitions#define    
  5. IDER_DEBUG 1#define FUNC_TRAC(info)   
  6. {if(IDER_DEBUG)cout<<"----"<<info<<"----"<<endl;}
  7. //class declarationclass Human;class Ape;  
  8. class Programmer;//class definitionclass Programmer{public:      
  9. Programmer(string where = "genius")     
  10.  {          
  11. FUNC_TRAC("Programmer Default Constructor");         from = where;      
  12. }     
  13.  /*Programmer(Programmer& p)     
  14.  {        
  15.   FUNC_TRAC("Programmer Copy Constructor");          
  16.  from = p.from;     
  17.  }*/     
  18.  void Speach(){cout<<"I am a Programmer, I am "<< from <<endl;}private:     
  19.  string from;};class Human {public:     
  20.  Human(string where = "delivered by Parents"):heart("Human with Training")     
  21.  {         
  22.  FUNC_TRAC("Human Default Constructor");         
  23.   from = where;    }      
  24. Human(Ape& a):heart("Human with Practice")     
  25.  {        FUNC_TRAC("Hummer Ape-Promotion Constructor");       
  26.    from = "Evolution from an Ape";    
  27.   }       
  28. operator Programmer() 
  29. //here is weird, it is really different whether we have "&" or not    
  30.   {         
  31.  FUNC_TRAC("Hummer Programmer-Cast Operator");     
  32.     return heart;        
  33.    //Programmer("Human with Practice");  
  34.  // it is not good to return temporary variable    
  35.   }     
  36.  Human& operator =(Human& h)    {      
  37.     FUNC_TRAC("Hummer Assignment Operator");       
  38.   cout<<"Call assignment"<<endl;       
  39.     return *this;    
  40.   }     
  41.  void Speach(){cout<<"I am a Human, I am "<< from <<endl;}    
  42.   private:     
  43.  string from;     
  44.  Programmer heart; //Every one has a heart to be a programmer};class Ape {public:     
  45.  Ape(string where = "from Nature")    
  46.   {       
  47.    FUNC_TRAC("Ape Default Constructor");      
  48.      from = where;    
  49.   }      
  50. Ape& operator =(Programmer& p)     
  51.  {         
  52.  FUNC_TRAC("Ape Programmer-Assignment Operator");          
  53.  from="Degeneration from a Programmer";        
  54.    return *this;    
  55.   }   
  56.    /*Ape& operator =(Ape& p)     
  57.   {        
  58.   FUNC_TRAC("Ape Assignment Operator");      
  59.    cout<<"Ape assign"<<endl;       
  60.     return *this;     
  61.   }*/     
  62.  void Speach(){cout<<"#(*%^, !@#$&)( "<< from <<endl;}private:     
  63.  string from;};//main functionint main(void) {   
  64.    Ape a;     
  65.  //a.Speach();    
  66.    Human h = a; // using promtion constructor     
  67.  //h.Speach();       
  68.    Human h2;     
  69.  h2 = a; // Error, no match assignment opeartor    
  70.     Programmer p = h; // using Programmer-cast operaotor    
  71.   //p.Speach();     
  72.  Programmer p0;    
  73.   p0 = h;     
  74.  // using  Programmer-cast operaotor       
  75.    Programmer p1 = h.operator Programmer();   
  76.  Programmer p2 = Programmer(h);   
  77.    Programmer p3 = (Programmer)h;    
  78.   Ape a2;     
  79.  a2 = p; //using assignment operator    
  80.   //a2.Speach();      
  81.     Ape a3 = p; // Error, no match constructor   
  82.    return 0;} 

在這個例子中,我定義了三個類,這三個類之間沒有繼承和被繼承的關系,也沒有friend關系,其基本聯系就是:Ape可以進化成為Human,Human經過不斷的訓練就可以成為Programmer,不過Programmer也有可能退化變成Ape。

分析

從main函數中他們進行的轉換操作,可以看出這是一種隱式的轉換。不過三個類的對象之間能夠實現轉換的真正原因卻并不相同。

首先,從Ape到Human的轉換方式

  1. Human h = a; 

其實是調用了Human的promotion構造函數

  1. Human(Ape& a); 

這個函數接受了Ape作為構造參數,實例化了一個Human對象。

從Human到 Programmer,則是因為我在Human中定義了一個到Programmer的轉換運算符:

operator Programmer()

因此,在main函數中的兩個賦值語句:

  1. Programmer p = h;  
  2. p0 = h; 

都是調用了這個轉換函數。

從Programmer退化到Ape是一件很不情愿的事情(就因為在中文里,我們是程序猿),在代碼中的實現方式,則是在Ape類中定義了一個接受Programmer引用作為參數的Assignment運算符的重載形式。

Ape& operator =(Programmer& p)

于是下邊的語句

a2 = p;

就得以在程序中運行了

進一步分析

已經看到了Ape, Human,Programmer的之間的轉換都是使用了不同的C++特性,調用的是不同的方法。但是深究起來,這些方法還是各有個的不同。

以Human到Programmer為基準,這個轉換用的是用戶自定義轉換(user-defined cast),因此可以說這種方式才是真正的類型之間的轉換。

也因此我們在main中看到了兩種語法格式的轉換都是有效的:

定義并初始化

Programmer p = h;

賦值

p0 = h;

但是Ape到Human的轉換調用的構造函數,因此它只有在類實例化對象并初始化的時候才有效,也因此下邊的語句會得到編譯器的錯誤:

  1. Human h2;  
  2. h2 = a; // Error, no match assignment opeartor 

因為Human從出生就知道自己是怎么來的,不應該后來才發現自己不是媽生的(當然,這些情況不是不可能的,比如“人猿泰山”)。

而Programmer到Ape是后天形成的,不然一出生就變成猴子了,那就只能用腳趾了Coding了。所以以下代碼也是編譯不過的:

  1. Ape a3 = p; // Error, no match constructor 

在回過來講講Human到Programmer,我們還可以用更多不同的形式來寫,比如兩種形式的顯示轉換:

  1. Programmer p1 = Programmer(h);  
  2. Programmer p2 = (Programmer)h; 

(是初始化還是賦值都無所謂)

但是真正編譯之后,其格式應該是:

Programmer p3 = h.operator Programmer();

對于Assignment運算符其實也是如此,真正調用的還是:

a2.operator =(p);

后記

其實在實際編程中,可能受到了C#的影響(因為C#的初始化并不是得到一個全新的對象,而只是獲得引用),并不會經常使用到用戶自定義轉換,也很少重載一個接受非自身對象引用的Assignment運算符。

真正要轉換的時候,多數還是通過構造函數進行。或者是,實例化好對象,通過兩者的接口對數據進行賦值。畢竟以上講到各種方式中,也只能調用到接收到對象的外部接口,不能進行私有數據的操作。

關于數值類型的轉換和類對象的轉換,前面都已經提到了,但似乎還遺漏了什么?

是的,C++還有引用類型(reference)和指針類型(pointer)。這兩者在不同類型之間的轉換還沒有說。

在C++中,指針類型似乎是被視為是沒有差異的,想想的確如此,因為它只是存放所指對象的地址,因此所需內存空間、格式都是一致的,也因此在C++不同類型 之間的指針是可以隨意轉換的,一般需要用顯示轉換。但是這種轉換是沒有意義,因為地址所指的類型并非所需要的類型,通過該地址進行偏移找到的數據或方法就不會是我們所需要的了,在運行的時候,程序就會發生異常。

對于引用類型,在沒有繼承關系的類型之間進行轉換似乎也并不合理,引用其實在實現上可以被視為指針,只是在語法格式上,它被當做對象使用。如果進行引用類型的轉換,我們到底是想要一個新的對象呢,還是只要地址?讓人迷糊。

另外,指針和引用的應該是用在已經存在的對象或對象變量上。因此如果是轉換中返回轉換運算符的方法之內的一個局部變量(像Human類的operator Programmer()方法中我注釋掉的那行代碼),那么在離開轉換運算符的方法之后,那些變量就會被回收,在指向那些地址也是沒有意義了;如果是在內部new一個心的對象,這個對象的管理就變得沒有約束性,我們不知道該在何時會去delete它;即使像我實現的那樣,在Human類中帶著一個Programmer的對象Heart,但是這個設計似乎也并不是非常好的,因為不能保證每個人都有一顆作為程序員的心。

遺留問題

前面也提到了指針和引用在類型轉換上的問題,因此對于用戶自定義轉換符,在我的代碼中,我所使用的是基于對象的轉換:

operator Programmer();

不是基于指針:

operator Programmer*();

也不是基于引用

operator Programmer&()

在我看來,這是合理的,也是合適的。

但是如果我在Programmer類中定義了一個copy構造函數,那么無論以上提到4種的從Human到Programmer的代碼格式都得到編譯錯誤。

這似乎可以理解:編譯器會從構造函數中發現合適的入口,但是它失敗了,所以就錯誤了。

但是為何

h.operator Programmer();

的格式也是錯誤就讓我十分的不解了。

再進一步,如果我把基于對象的轉換改成基于引用的轉換,編譯器就沒有報出錯誤了。但是我認為這個在邏輯上應該是不對的。

C++真的一門復雜的語言(當然跟JavaScript還是沒得比的),對于這個問題,如果讀者你知道這方面的原因,還請你能跟我分享一下你的理解和看法。

原文鏈接:http://www.cnblogs.com/ider/archive/2011/07/03/cpp_cast_operator_part1.html

【編輯推薦】

  1. C++中static的用法總結
  2. C++內存管理的探討
  3. C++的輸出格式控制技巧分析
  4. C++多態技術的實現和反思
  5. C++中的指針用法匯集
責任編輯:彭凡 來源: 博客園
相關推薦

2009-08-03 13:39:46

C#自定義用戶控件

2009-08-12 14:53:50

C#類型轉換函數

2021-06-17 06:52:37

C#自定義異常

2022-06-20 08:26:39

Spring容器類型轉換

2010-02-03 16:56:20

C++自定義類

2024-10-14 17:18:27

2009-07-06 16:20:50

JSP自定義標簽

2018-03-16 08:41:16

Oracle存儲函數

2009-10-09 14:24:27

2009-08-04 08:58:01

C#自定義特性

2009-09-11 11:04:23

C# WinForm自

2010-10-20 16:07:48

SQL用戶自定義角色

2011-08-02 11:17:13

iOS開發 View

2009-03-25 09:43:51

開發自定義托管WCF

2023-08-26 19:04:40

配置write轉換器

2009-08-03 13:32:38

C#自定義組件

2009-08-03 13:34:06

自定義C#控件

2009-08-28 17:45:19

C#自定義數據

2009-09-03 15:46:57

C#自定義事件

2011-03-02 10:24:23

DashboardAndroid用戶界面設計模板
點贊
收藏

51CTO技術棧公眾號

最新成人av网站| 久久av国产紧身裤| 亚洲美女屁股眼交3| 国产精品免费视频一区二区 | 亚洲精品高清无码视频| 草草影院在线观看| 国产成人综合精品三级| 欧美在线观看一区二区三区| 天堂网中文在线观看| 中文字幕日韩高清在线| 在线影院国内精品| 真实国产乱子伦对白视频| 天堂网www中文在线| 国模大尺度一区二区三区| 51ⅴ精品国产91久久久久久| 午夜剧场免费在线观看| 中文字幕精品影院| 欧美电视剧在线看免费| 中文字幕在线导航| 成人观看网址| 亚洲欧美一区二区三区国产精品| 欧美福利精品| 亚洲成熟女性毛茸茸| 人妖欧美一区二区| 91爱视频在线| 久久综合亚洲色hezyo国产| 日韩激情免费| 亚洲人精品午夜在线观看| 在线观看视频你懂得| 成人激情视屏| 色av成人天堂桃色av| 黄色成人在线看| 99热国产在线| 最新日韩av在线| 日韩三级电影免费观看| 五月天婷婷视频| 成人高清视频在线观看| 99re国产| 国产chinasex对白videos麻豆| 秋霞成人午夜伦在线观看| 日本a级片电影一区二区| 国产中文字幕免费| 欧美特黄一级| www.久久色.com| 亚洲AV无码成人精品区明星换面| 色愁久久久久久| 亚洲黄在线观看| 喷水视频在线观看| 国产欧美三级电影| 日韩av在线免费看| 亚洲中文字幕无码av| 亚洲精品一区国产| 精品久久久久久亚洲综合网| 91看片破解版| 日本一区二区三区中文字幕| 欧美色区777第一页| 欧美精品成人网| 欧美亚洲大片| 欧美美女网站色| 亚洲精品视频三区| 婷婷综合国产| 欧美精品一区二区三区蜜臀| 中文字幕天堂av| 精品综合久久88少妇激情| 日韩黄色高清视频| 欧洲女同同性吃奶| 清纯唯美亚洲综合一区| 久久精品亚洲国产| 久久久国产精品黄毛片| 99精品国产在热久久婷婷| 4438全国成人免费| 亚洲视屏在线观看| 国产在线一区二区| 成人h视频在线观看| 色综合久久久久久| 国产日韩v精品一区二区| 亚洲欧美综合一区| 午夜av在线播放| 五月婷婷丁香综合网| 日韩av免费| 在线一区二区三区四区五区| 午夜视频在线瓜伦| 亚洲成人毛片| 日韩精品中文字幕一区二区三区| 国产人妻黑人一区二区三区| 欧美男男freegayvideosroom| 精品一区二区三区四区| 免费成人深夜天涯网站| 亚洲欧洲中文字幕| 97久久精品在线| 国产黄网在线观看| 国产精品1区2区3区| 精品蜜桃一区二区三区| 丁香在线视频| 亚洲自拍另类综合| 欧美黑人又粗又大又爽免费| 国产成人视屏| 亚洲欧美制服综合另类| 无码黑人精品一区二区| 最新亚洲视频| 国产在线视频不卡| 五月天婷婷社区| 亚洲婷婷综合色高清在线| 国产午夜福利在线播放| 久久亚洲精品人成综合网| 精品国产乱码久久久久久免费| 一区二区精品免费| 欧美日一区二区三区在线观看国产免| 91av在线网站| 亚洲av无码片一区二区三区 | 午夜精品久久久久影视| 欧美性猛交xxx乱久交| 亚洲91网站| 在线精品高清中文字幕| 精品在线视频观看| 黄页视频在线91| 热re99久久精品国99热蜜月| 国产一线二线在线观看| 欧美日韩黄色一区二区| 亚洲成人av免费在线观看| 一区二区三区在线| 国产精品电影久久久久电影网| 日本精品999| 亚洲少妇30p| 99视频在线视频| 亚洲激情播播| 性欧美xxxx交| 成人毛片在线免费观看| 成人免费小视频| 天堂社区在线视频| 欧美男gay| 日韩美女视频免费在线观看| 日韩一级免费毛片| 亚洲综合一区二区| 日韩av影视大全| 国产精品久久久久久久免费观看| 日韩av123| 欧美色图另类| 黑人欧美xxxx| 国产福利在线观看视频| 国产中文一区| 成人免费视频视频在| 91蜜桃在线视频| 欧美一区二区三区在线观看| 国产在线免费看| 久久国产精品露脸对白| 亚洲一区3d动漫同人无遮挡| 欧美日韩国产网站| 在线视频日韩精品| 最近中文字幕在线观看视频| 国产日韩综合av| 日韩肉感妇bbwbbwbbw| 精品免费av| 国产精品第三页| 五月天婷婷在线视频| 欧美女孩性生活视频| 美女av免费看| 久久电影国产免费久久电影| 亚洲乱码国产乱码精品天美传媒| 日本一区二区电影| 日韩视频免费中文字幕| 国产探花精品一区二区| 亚洲精品伦理在线| www.黄色网| 国产欧美一级| 蜜桃欧美视频| 97人人做人人爽香蕉精品| 日韩综合视频在线观看| 国产美女www爽爽爽视频| 一区二区三区在线视频播放 | 中国一区二区视频| 中文字幕制服丝袜一区二区三区| www.色就是色.com| 亚洲精品美女| 色视频一区二区三区| 久久久免费人体| 欧美福利视频在线| 亚洲三区在线观看无套内射| 日本精品一区二区三区高清| 在线观看免费黄色网址| 国产成人激情av| 可以在线看的黄色网址| 91亚洲自偷观看高清| 成人动漫在线视频| 26uuu亚洲电影| 久久亚洲欧美日韩精品专区| 国产91免费在线观看| 色噜噜狠狠成人中文综合| 中文字幕91视频| 成人爱爱电影网址| 三级av免费观看| 在线成人国产| 亚洲欧美日产图| 国产精品宾馆| 日本sm极度另类视频| 1区2区3区在线视频| 亚洲人在线视频| 亚洲AV无码成人片在线观看| 日本久久一区二区三区| 9999热视频| 久久久五月婷婷| 九九热精品在线播放| 日韩视频三区| 永久久久久久| 久久成人av| 国产精品国产精品国产专区蜜臀ah| 日本欧美日韩| 久久久久久国产精品美女| av每日在线更新| 日韩黄在线观看| www.天堂在线| 欧美日韩国产成人在线免费| 日韩乱码在线观看| 亚洲精选一二三| 丁香激情五月少妇| 国产69精品一区二区亚洲孕妇| 日日摸天天爽天天爽视频| 亚洲天堂黄色| 欧美日韩视频免费在线观看| 九色精品国产蝌蚪| 精品久久久久久综合日本| 美女久久精品| 成人黄色激情网| 国产成人精选| 国产精品pans私拍| 中文字幕乱码在线播放| 欧美精品激情在线观看| 成人黄色网址| 日韩在线中文字| 触手亚洲一区二区三区| 亚洲男人av电影| 婷婷伊人综合中文字幕| 精品久久久久久最新网址| 99久久国产热无码精品免费| 欧美情侣在线播放| 在线免费看毛片| 欧美艳星brazzers| 国产乱码77777777| 91精品福利视频| 日韩免费av网站| 一本大道久久a久久精品综合| 日韩伦理在线视频| 精品久久久香蕉免费精品视频| 久久久久久国产精品视频 | 成人精品免费在线观看| 亚洲国产色一区| 国产一级免费观看| 亚洲成人在线网站| 国产精品suv一区二区三区| 五月婷婷久久丁香| 国产成人亚洲欧洲在线| 精品动漫一区二区三区| 天天综合天天干| 色综合色狠狠天天综合色| av片免费观看| 欧美日韩免费在线视频| 国产男女无套免费网站| 欧美一区二区视频在线观看2020| 草草视频在线播放| 精品精品国产高清a毛片牛牛 | 精品国产一区二区三区在线观看 | 亚洲成人777| 国产免费观看av| 日韩欧美在线视频观看| 国产精品传媒在线观看| 欧美日韩1234| 精品区在线观看| 亚洲精品国产美女| 国内精品在线视频| www日韩欧美| 欧美精品videossex少妇| 98精品在线视频| 日韩天堂在线| 91九色极品视频| 欧美一级全黄| 偷拍视频一区二区| 亚洲欧美文学| 又粗又黑又大的吊av| 男女男精品视频| 少妇精品无码一区二区| 91麻豆国产福利在线观看| 天堂av网手机版| 亚洲一区自拍偷拍| 天天爱天天做天天爽| 日韩视频中午一区| 国内三级在线观看| 欧美大片在线看| 日本在线视频一区二区| 91成人理论电影| 亚洲传媒在线| 欧美狂野激情性xxxx在线观| 久久久蜜桃一区二区人| 亚洲在线观看网站| 久久久影院官网| 国产盗摄一区二区三区在线| 欧美性jizz18性欧美| 国产美女自慰在线观看| 亚洲美女在线观看| 天使と恶魔の榨精在线播放| 国产成人黄色av| 超碰97成人| 正在播放91九色| 久久中文在线| av av在线| 一区二区中文字幕在线| 亚洲av中文无码乱人伦在线视色| 这里只有精品99re| 国产日本在线视频| 久久久综合av| 另类视频一区二区三区| 视频在线精品一区| 国产精品外国| 亚洲一级Av无码毛片久久精品| 中文一区在线播放| 亚洲日本视频在线观看| 日韩欧美的一区二区| 日本综合在线| 国产福利视频一区| 欧美福利在线播放网址导航| 2021国产视频| 精品在线一区二区| avhd101老司机| 91高清视频在线| 男人的天堂在线视频| 2019中文在线观看| 国产成人精品福利| 免费cad大片在线观看| 久久国产精品99久久久久久老狼| 国产美女免费网站| 日韩欧美亚洲国产一区| 色偷偷在线观看| 国产69精品久久久久9| 亚洲一区二区三区日本久久九| 免费久久久久久| 国内精品伊人久久久久av一坑| 欧美激情视频二区| 欧美性猛片aaaaaaa做受| 国产三级在线免费| 国产精品久久77777| 国产亚洲一区二区三区不卡| 亚洲熟女乱色一区二区三区| wwwwww.欧美系列| 欧美性猛交bbbbb精品| 亚洲乱码国产乱码精品精| 欧美大胆a人体大胆做受| 激情小说综合网| 亚洲一区二区三区免费在线观看| 国产精品嫩草av| 欧美性猛交xxxx黑人| 免费在线黄色电影| 国产精品v日韩精品| 999国产精品| 中文字幕色网站| 一区二区三区在线观看国产| 成人高潮片免费视频| 欧美大片第1页| 免费看成人人体视频| www黄色av| 国产免费观看久久| 国产又粗又黄又爽视频| 久久色精品视频| 中文字幕av一区二区三区四区| 好吊色视频988gao在线观看| 国产91丝袜在线18| 欧美日韩乱国产| 这里只有精品视频在线| 亚洲一区二区小说| 日本wwwcom| 国产婷婷一区二区| 国产人妻精品一区二区三区| 欧美极品少妇xxxxx| 秋霞蜜臀av久久电影网免费| 情侣黄网站免费看| 国产精品电影一区二区三区| 国产aⅴ一区二区三区| 91精品国产乱码久久久久久蜜臀| 国产亚洲一卡2卡3卡4卡新区 | 久久久噜噜噜久噜久久| 乱亲女h秽乱长久久久| 黄色一级二级三级| 亚洲精品日韩综合观看成人91| 空姐吹箫视频大全| 国产精欧美一区二区三区| 亚洲h色精品| 无码人妻精品一区二区三区温州| 欧美羞羞免费网站| 亚洲第一图区| 日本成人三级电影网站| 国产伦精一区二区三区| 国产精品国产三级国产专区52| 中文字幕在线国产精品| 999国产精品一区| 538在线视频观看| 亚洲第一av色| 麻豆影视在线观看_| 久久综合一区| 国产伦精品一区二区三区免费迷| 欧美三级一区二区三区| 久久久91精品国产一区不卡| 免费av一区|