• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            寶杉的博客

            UNIX/LINUX;ACE;SNMP;C++
            posts - 33, comments - 23, trackbacks - 0, articles - 0

             

             錯(cuò)誤

            #include   <iostream.h>
            #include   <string.h>

            ……

            string   st("test   string");  

            ……

            error   C2065:   'string'   :   undeclared   identifier  

            解釋

            #include   <string>  

            using   namespace   std;  

            因?yàn)樵?  using   namespace   std;   情況下, 

            #include   <string>     是使用   C++     string   類庫(kù); 

            #include   <cstring>     是使用   C   的string   操作庫(kù)函數(shù)   ...  

            細(xì)節(jié) 加不加“.h”

            #include <iostream.h>

            #include <string>

            using       namespace      std;

            沒有錯(cuò)??!

            #include <iostream.h>

            #include <string.h>

            using       namespace      std;

            編譯有錯(cuò)!!

            解釋

              “string.h“這個(gè)頭文件是“舊式c頭文件”,而這個(gè)文件中沒有定義string類(這點(diǎn)應(yīng)該不奇怪,c語言中哪有什么類?。@個(gè)頭文件里面是有關(guān)“舊式char-based字符串”的操作函數(shù),注意都是操作char*字符串的“函數(shù)”,所以你引用這個(gè)頭文件,編譯器肯定找不到“string”了。  
              “string”這個(gè)頭文件(沒有擴(kuò)展名)是C++標(biāo)準(zhǔn)化之后的C++頭文件,里面才有string類的相關(guān)定義(其實(shí),string并不是類,是一個(gè)typedef,但是使用的時(shí)候不用去管他),而C++標(biāo)準(zhǔn)頭文件中的東西都放在namespace   std中了,所以使用的時(shí)候要“using   namespace   std”。  
              附:建議樓主不要用"iostream.h",改成“iostream”吧,因?yàn)闃?biāo)準(zhǔn)已經(jīng)明確規(guī)定不在支持"iostream.h"這種頭文件了。

            標(biāo)準(zhǔn)寫法

            #include <iostream>

            #include <string>

            using       namespace      std;

             

            F: 為什么using   namespace   std;  
                   要寫在include后面?

            Q: 因?yàn)閕nclude的文件包含名字域std  
            如果你把using   namespace   std寫在前面,編譯器就看不到std這個(gè)名字

            posted @ 2007-08-03 13:01 寶杉 閱讀(414) | 評(píng)論 (0)編輯 收藏

             

            引用即別名,數(shù)組不能引用。

            引用提高效率,又不在函數(shù)中改變。參考:file:///F:/fragments/documents/深入探討C++中的引用%20-%20KiRa的專欄%20-%20CSDNBlog.mht

             

            常引用

            常引用聲明方式:const 類型標(biāo)識(shí)符 &引用名 = 目標(biāo)變量名;

            const類型 和 & 是分不開的,引用一般定義成const。

             

            引用作為返回值

            要以引用返回函數(shù)值,則函數(shù)定義時(shí)要按以下格式:

            類型標(biāo)識(shí)符 &函數(shù)名(形參列表及類型說明)
            {

            函數(shù)體

            }

            說明:

             ?。?)以引用返回函數(shù)值,定義函數(shù)時(shí)需要在函數(shù)名前加&

             ?。?)用引用返回一個(gè)函數(shù)值的最大好處是,在內(nèi)存中不產(chǎn)生被返回值的副本。

            例子:Diary files\C++exams\rtn_ref

             

            引用作為返回值,必須遵守以下規(guī)則:

            (1)不能返回局部變量的引用。這條可以參照Effective C++[1]的Item 31。主要原因是局部變量會(huì)在函數(shù)返回后被銷毀,因此被返回的引用就成為了"無所指"的引用,程序會(huì)進(jìn)入未知狀態(tài)。

            (2)不能返回函數(shù)內(nèi)部new分配的內(nèi)存的引用。這條可以參照Effective C++[1]的Item 31。雖然不存在局部變量的被動(dòng)銷毀問題,可對(duì)于這種情況(返回函數(shù)內(nèi)部new分配內(nèi)存的引用),又面臨其它尷尬局面。例如,被函數(shù)返回的引用只是作為一個(gè)臨時(shí)變量出現(xiàn),而沒有被賦予一個(gè)實(shí)際的變量,那么這個(gè)引用所指向的空間(由new分配)就無法釋放,造成memory leak。

            (3)可以返回類成員的引用,但最好是const。這條原則可以參照Effective C++[1]的Item 30。主要原因是當(dāng)對(duì)象的屬性是與某種業(yè)務(wù)規(guī)則(business rule)相關(guān)聯(lián)的時(shí)候,其賦值常常與某些其它屬性或者對(duì)象的狀態(tài)有關(guān),因此有必要將賦值操作封裝在一個(gè)業(yè)務(wù)規(guī)則當(dāng)中。如果其它對(duì)象可以獲得該屬性的非常量引用(或指針),那么對(duì)該屬性的單純賦值就會(huì)破壞業(yè)務(wù)規(guī)則的完整性。

            (4)引用與一些操作符的重載:

              流操作符<<和>>,這兩個(gè)操作符常常希望被連續(xù)使用,例如:cout << "hello" << endl; 因此這兩個(gè)操作符的返回值應(yīng)該是一個(gè)仍然支持這兩個(gè)操作符的流引用??蛇x的其它方案包括:返回一個(gè)流對(duì)象和返回一個(gè)流對(duì)象指針。但是對(duì)于返回一個(gè)流對(duì)象,程序必須重新(拷貝)構(gòu)造一個(gè)新的流對(duì)象,也就是說,連續(xù)的兩個(gè)<<操作符實(shí)際上是針對(duì)不同對(duì)象的!這無法讓人接受。對(duì)于返回一個(gè)流指針則不能連續(xù)使用<<操作符。因此,返回一個(gè)流對(duì)象引用是惟一選擇。這個(gè)唯一選擇很關(guān)鍵,它說明了引用的重要性以及無可替代性,也許這就是C++語言中引入引用這個(gè)概念的原因吧。 賦值操作符=。這個(gè)操作符象流操作符一樣,是可以連續(xù)使用的,例如:x = j = 10;或者(x=10)=100;賦值操作符的返回值必須是一個(gè)左值,以便可以被繼續(xù)賦值。因此引用成了這個(gè)操作符的惟一返回值選擇。

            posted @ 2007-08-03 13:00 寶杉 閱讀(190) | 評(píng)論 (0)編輯 收藏

             

            在Visual C++中,可以在函數(shù)類型前加_cdecl,_stdcall或者_(dá)pascal來表示其調(diào)用規(guī)范(默認(rèn)為_cdecl)

            // 被調(diào)用函數(shù)是以int為參數(shù),以int為返回值
            __stdcall int callee(int);

            // 調(diào)用函數(shù)以函數(shù)指針為參數(shù)
            void caller( __cdecl int(*ptr)(int));

            // 在p中企圖存儲(chǔ)被調(diào)用函數(shù)地址的非法操作
            __cdecl int(*p)(int) = callee; // 出錯(cuò)

            指針p和callee()的類型不兼容,因?yàn)樗鼈冇胁煌恼{(diào)用規(guī)范。因此不能將被調(diào)用者的地址賦值給指針p,盡管兩者有相同的返回值和參數(shù)列。 

            posted @ 2007-08-03 12:59 寶杉 閱讀(510) | 評(píng)論 (0)編輯 收藏

             

            聲明:

            先定義函數(shù),void print(string str);

            聲明一個(gè)函數(shù)指針,void ( *p )( string ) = NULL;

            指向copy函數(shù),p = & print; 或 p = print;

            調(diào)用指針函數(shù),p( “hello” );

             

            可以把多個(gè)函數(shù)放在一個(gè)指針數(shù)組里,然后通過數(shù)組對(duì)應(yīng)指針方便調(diào)用函數(shù)。

            例子:Diary files\C++exams\pointer_func

             

            動(dòng)態(tài)綁定一個(gè)函數(shù)

            void caller(void(*ptr)())

            {

            ptr();             /* 調(diào)用ptr指向的函數(shù) */

            }

            void func();

            int main()

            {

            p = func;

            caller(p); /* 傳遞函數(shù)地址到調(diào)用者 */

            }

            如果賦了不同的值給p(不同函數(shù)地址),那么調(diào)用者將調(diào)用不同地址的函數(shù)。賦值可以發(fā)生在運(yùn)行時(shí),這樣使你能實(shí)現(xiàn)動(dòng)態(tài)綁定。

            posted @ 2007-08-03 12:58 寶杉 閱讀(139) | 評(píng)論 (0)編輯 收藏

            靜態(tài)聯(lián)編:運(yùn)行之前就完成的聯(lián)編,系統(tǒng)在編譯時(shí)就決定如何完成某個(gè)動(dòng)作。
            動(dòng)態(tài)聯(lián)編:程序運(yùn)行之后才完成的聯(lián)編,系統(tǒng)在運(yùn)行時(shí)動(dòng)態(tài)實(shí)現(xiàn)某一動(dòng)作。
            靜態(tài)多態(tài)性:函數(shù)重載;運(yùn)算符重載;
            動(dòng)態(tài)多態(tài)性:繼承;虛函數(shù);
            函數(shù)重載
            1 參數(shù)有差別。
            2 參數(shù)相同,屬不同類。
            一個(gè)重載的例子:Diary files\C++exams\func_reload
             
            名字壓延:是編譯器根據(jù)函數(shù)重載的不同類型,在編譯時(shí)改變函數(shù)名字,而達(dá)到區(qū)分的目的。

            posted @ 2007-08-03 12:57 寶杉 閱讀(140) | 評(píng)論 (0)編輯 收藏

            友元函數(shù)一般在類中聲明,如果一個(gè)友元需要訪問多個(gè)類的對(duì)象,那么每個(gè)類都要聲明一次友元函數(shù)。

            還要注意:友元函數(shù)的入口包括多個(gè)類,那這些類都要在友元函數(shù)之前聲明。

            如例子:Diary files\C++exams\frnd_vst2_func

            如果是類person的兩個(gè)繼承他的子類boy和girl,那么友元函數(shù)如何聲明和定義。

            Diary files\C++exams\frnd_member

            這需要注意的地方有:

            基類的數(shù)據(jù)成員共有;構(gòu)造函數(shù);構(gòu)造函數(shù)初始化表;類的聲明先于友元函數(shù),提高了重用性;

            基類的數(shù)據(jù)成員必須共有,因?yàn)闃?gòu)造函數(shù)會(huì)訪問到它們,子類的構(gòu)造函數(shù)也會(huì)引用基類的構(gòu)造函數(shù),如果是私有的會(huì)是的子類構(gòu)造函數(shù)不能直接訪問基類的私有成員,要通過基類的成員函數(shù)來訪問。

            子類:public基類

             

            還有寫細(xì)節(jié)問題:

            頭文件;char *a的聲明和使用;分配char*數(shù)據(jù);

            例如:

            char *name;

            name = new char[ strlen( s ) + 1 ];

             

            友元函數(shù)的聲明時(shí)的入口參數(shù)可以只寫類型,不寫參數(shù)名。

            例如:

            class boy

            {

                   ……

                   void disp( gril & );

            }

            注意聲明時(shí)的入口參數(shù)可省略,但要寫&。

            定義時(shí),寫成

            void disp( gril &x ){      ……       }

            posted @ 2007-08-03 12:55 寶杉 閱讀(1012) | 評(píng)論 (0)編輯 收藏

             

            聲明:           類    對(duì)象;     類       *指針;

                               int  i;           <class>      *this;

             

            this指針是一個(gè)隱含指針,是成員函數(shù)所屬對(duì)象的指針。

            每個(gè)成員函數(shù)都有一個(gè)this指針,this指針指向該函數(shù)所屬類的對(duì)象。

             

            使用格式:this -> 成員變量

             

            不同的對(duì)象調(diào)用同一個(gè)成員函數(shù),C++會(huì)根據(jù)成員函數(shù)的this指針指向哪一個(gè)對(duì)象,來調(diào)用該對(duì)象的成員變量。

             

            this指針如何得到對(duì)象名?

            例如:一個(gè)類class me的初始化函數(shù):

            void init(char ma, int mb)

            { a = ma; b = mb; }

            編譯時(shí),被編譯器轉(zhuǎn)化為:

                   void init(me *this, char ma, int mb)     //多了一個(gè)this指針的參數(shù),指向me類的obj

                  { this -> a = ma, this -> b = mb; }

            posted @ 2007-08-03 12:53 寶杉 閱讀(280) | 評(píng)論 (0)編輯 收藏

             

               對(duì)于只做輸入用的指針參數(shù),最好用const,這樣避免指針參數(shù)被修改。

               比如:對(duì)于上面的StringCopy的例子,寫成

               void StringCopy (char *strDestination, const char *strSource);         //比較安全。

               但是如果輸入?yún)?shù)以值傳遞的形式傳遞對(duì)象,則改為使用const &最好,因?yàn)槭∪チ伺R時(shí)對(duì)象的構(gòu)造和解析的過程,提高效率和安全性。

             

               int printf(……);這個(gè)函數(shù)的參數(shù)不確定,沒有嚴(yán)格的類型檢查,所以最好不用。

            posted @ 2007-08-03 12:52 寶杉 閱讀(352) | 評(píng)論 (1)編輯 收藏

             

            1 介紹

            此文描述了組成ACE框架的Reactor模式的設(shè)計(jì)和執(zhí)行。Reactor負(fù)責(zé)處理由一個(gè)或多個(gè)client并發(fā)的傳遞給一個(gè)應(yīng)用程序的服務(wù)請(qǐng)求。應(yīng)用程序的每個(gè)服務(wù)由一個(gè)分離的event handler(事件句柄)執(zhí)行,event handler包括一個(gè)或多個(gè)進(jìn)程的服務(wù)器特殊請(qǐng)求的方法。

                   此文描述的Reactor模式的執(zhí)行,event handler分發(fā)是由ACE_Reactor實(shí)現(xiàn)的。ACE_Reactor結(jié)合I/O事件的分離器,以及其他類型的時(shí)間,比如timers和signals。ACE_Reactor的核心實(shí)現(xiàn)是基于同步事件分離,比如select或者WaitForMultipleObjects。當(dāng)分離器指示指定的事件發(fā)生了,ACE_Reactor會(huì)自動(dòng)分發(fā)預(yù)先注冊(cè)的事件句柄的方法。注冊(cè)的event handler方法會(huì)完成應(yīng)用程序?qū)?yīng)請(qǐng)求事件的服務(wù)。

                   本文組織如下:第二章描述ACE_Reactor框架主要特性;第三章大致介紹ACE_Reactor實(shí)現(xiàn)的OO(面向?qū)ο螅┰O(shè)計(jì);第四章舉了服務(wù)器端實(shí)現(xiàn)的例子,用以證明ACE_Reactor怎樣簡(jiǎn)化并發(fā)的,基于事件的網(wǎng)絡(luò)應(yīng)用程序的發(fā)展;第五章描述當(dāng)使用ACE_Reactor開發(fā)基于事件的應(yīng)用程序的設(shè)計(jì)規(guī)則;第六章是結(jié)束語。

            2 ACE_Reactor的特性

            ACE_Reactor提供OO的事件分離機(jī)制和消息分發(fā)框架,它簡(jiǎn)化基于事件的應(yīng)用程序的開發(fā)。以下特性是:

            OO的事件分離和消息分發(fā)接口:

            使用ACE_Reactor的應(yīng)用程序不直接調(diào)用底層OS(操作系統(tǒng))的事件分離API函數(shù)。比如select或WaitForMultipleObjects。他們繼承ACE Event Handler基類并創(chuàng)建了具體的event handlers。這個(gè)類用特定的虛擬函數(shù)處理不同類型的事件,比如I/O事件,timer事件,signals(信號(hào)量機(jī)制),和同步事件。

            應(yīng)用程序用Reactor框架創(chuàng)建具體的event handler,并注冊(cè)他們。特性1顯示了ACE Reactor.的關(guān)鍵組件。這個(gè)特性描述執(zhí)行日子服務(wù)的事件句柄,這個(gè)在第四章講述。

            posted @ 2007-08-03 12:42 寶杉 閱讀(1588) | 評(píng)論 (0)編輯 收藏

                  ACE中的流包裝提供面向連接的通信。流數(shù)據(jù)傳輸包裝類包括ACE_SOCK_Stream和ACE_LSOCK_Stream,它們分別包裝TCP/IP和UNIX域socket協(xié)議數(shù)據(jù)傳輸功能。連接建立類包括針對(duì)TCP/IP的ACE_SOCK_Connector和ACE_SOCK_Acceptor,以及針對(duì)UNIX域socket的ACE_LSOCK_Connector和ACE_LSOCK_Acceptor。
                  Acceptor類用于被動(dòng)地接受連接(使用BSD accept()調(diào)用),而Connector類用于主動(dòng)地建立連接(使用BSD connect()調(diào)用)。
                  下面的例子演示接收器和連接器是怎樣用于建立連接的。該連接隨后將用于使用流數(shù)據(jù)傳輸類來傳輸數(shù)據(jù)。

            server端代碼:
            // 環(huán)境VC6.0+ACE5.4.2
            // proj:ACE stream server
            // date:07-7-24
            // robin
            //

            #include "stdafx.h"

            #include "ace/Log_Msg.h"
            #include "ace/Time_Value.h"
            #include "ace/OS.h"


            #include "ace/SOCK_Acceptor.h"
            #include "ace/SOCK_Stream.h"

            #define SIZE_DATA 18
            #define SIZE_BUF 1024
            #define NO_ITERATIONS 5

            class Server
            {
            public:
             Server (int port) : server_addr_(port),peer_acceptor_(server_addr_)
             {
              data_buf_ = new char[SIZE_BUF];
             }

             //Handle the connection once it has been established. Here the
             //connection is handled by reading SIZE_DATA amount of data from the
             //remote and then closing the connection stream down.

             int handle_connection()
             {
              // Read data from client
              for(int i=0;i<NO_ITERATIONS;i++)
              {
               int byte_count=0;
               if( (byte_count = new_stream_.recv_n(data_buf_, SIZE_DATA, 0) ) == -1 )
                ACE_ERROR ((LM_ERROR, "%p\n", "Error in recv"));
               else
               {
                data_buf_[byte_count]=0;
                ACE_DEBUG((LM_DEBUG,"Server received %s \n",data_buf_));
               }
              }

              // Close new endpoint
              if (new_stream_.close () == -1)
               ACE_ERROR ((LM_ERROR, "%p\n", "close"));
              return 0;
             }


             //Use the acceptor component peer_acceptor_ to accept the connection
             //into the underlying stream new_stream_. After the connection has been
             //established call the handle_connection() method.
             
             int accept_connections ()
             {
              if (peer_acceptor_.get_local_addr (server_addr_) == -1)
               ACE_ERROR_RETURN ((LM_ERROR,"%p\n","Error in get_local_addr"),1);
              ACE_DEBUG ((LM_DEBUG,"Starting server at port %d\n",
               server_addr_.get_port_number ()));
              
              // Performs the iterative server activities.

              while(1)
              {
               ACE_Time_Value timeout (ACE_DEFAULT_TIMEOUT);
               if (peer_acceptor_.accept(new_stream_, &client_addr_, &timeout)== -1)
               {
                ACE_ERROR ((LM_ERROR, "%p\n", "accept"));
                continue;
               }
               else
               {
                ACE_DEBUG((LM_DEBUG,
                 "Connection established with remote %s:%d\n",
                 client_addr_.get_host_name(),client_addr_.get_port_number()));

                //Handle the connection
                handle_connection();
               }
              }
             }

            private:
             char *data_buf_;
             ACE_INET_Addr server_addr_;
             ACE_INET_Addr client_addr_;
             ACE_SOCK_Acceptor peer_acceptor_;
             ACE_SOCK_Stream new_stream_;
            };


            int main (int argc, char *argv[])
            {
             if(argc<2)
             {
              ACE_ERROR((LM_ERROR,"Usage %s <port_num>", argv[0]));
              ACE_OS::exit(1);
             }

            // char *ip;
            // ip = new char[strlen("192.168.1.160")];
            // Server server(ACE_OS::atoi(ip));  //argv[1])

             Server server(ACE_OS::atoi(argv[1]));
             server.accept_connections();
             return 0;
            }

            client端:
            // proj:ACE stream client
            // client
            // date:7-24
            // robin

            #include "stdafx.h"

            //******additional*******//
            #include "ace/Log_Msg.h"  //ACE_ERROR ACE_DEBUG
            #include "ace/Time_Value.h"  // ACE_Time_Value
            #include "ace/OS.h"    // ACE_OS::atoi exit
            //******additional*******//

            #include "ace/SOCK_Connector.h"
            #include "ace/INET_Addr.h"

            #define SIZE_BUF 128
            #define NO_ITERATIONS 5


            class Client
            {
            public:
             Client(char *hostname, int port):remote_addr_(port,hostname)
             {
              data_buf_="Hello from Client";
             }

             //Uses a connector component `connector_’ to connect to a
             //remote machine and pass the connection into a stream
             //component client_stream_
             int connect_to_server()
             {
              // Initiate blocking connection with server.
              ACE_DEBUG ((LM_DEBUG, "(%P|%t) Starting connect to %s:%d\n",
               remote_addr_.get_host_name(),remote_addr_.get_port_number()));
              if (connector_.connect (client_stream_, remote_addr_) == -1)
               ACE_ERROR_RETURN ((LM_ERROR,"(%P|%t) %p\n","connection failed"),-1);
              else
               ACE_DEBUG ((LM_DEBUG,"(%P|%t) connected to %s\n",
               remote_addr_.get_host_name ()));
              return 0;
             }


             //Uses a stream component to send data to the remote host.
             int send_to_server()
             {
              // Send data to server
              for(int i=0;i<NO_ITERATIONS; i++)
              {
               if (client_stream_.send_n (data_buf_,
                ACE_OS::strlen(data_buf_)+1, 0) == -1)
               {
                ACE_ERROR_RETURN ((LM_ERROR,"(%P|%t) %p\n","send_n"),0);
                break;
               }
              }
              //Close down the connection
              close();
             }

             //Close down the connection properly.
             int close()
             {
              if (client_stream_.close () == -1)
               ACE_ERROR_RETURN ((LM_ERROR,"(%P|%t) %p\n","close"),-1);
              else
               return 0;
             }
            private:
             ACE_SOCK_Stream client_stream_;
             ACE_INET_Addr remote_addr_;
             ACE_SOCK_Connector connector_;
             char *data_buf_;
            };


            int main(int argc, char* argv[])
            {
             if(argc<3)
             {
              ACE_DEBUG((LM_DEBUG,"Usage %s <hostname> <port_number>\n", argv[0]));
              ACE_OS::exit(1);
             }

             Client client(argv[1],ACE_OS::atoi(argv[2]));
             client.connect_to_server();
             client.send_to_server();
             return 0;
            }


            運(yùn)行結(jié)果:
            cmd里到exe目錄下,先啟動(dòng)服務(wù)端server.exe 192.168.1.160
            如圖1:

            正在輪詢等待。

            再到client服務(wù)端,同樣的方法
            運(yùn)行命令行參數(shù)格式 client.exe 192.168.1.160 192
             解析:ACE_DEBUG((LM_DEBUG,"Usage %s <hostname> <port_number>\n", argv[0]));
                     命令行參數(shù)為 <hostname><port> = <192.168.1.160><192>
                     端口是由圖1的第二行顯示,不是自己設(shè)定的。
            如圖2:

            只是照搬書上的例子,后面打算自己分析一下。

            posted @ 2007-07-25 10:57 寶杉 閱讀(1419) | 評(píng)論 (2)編輯 收藏

            僅列出標(biāo)題
            共4頁(yè): 1 2 3 4 
            www.久久热.com| 性欧美丰满熟妇XXXX性久久久 | 99久久精品影院老鸭窝| 久久99热这里只频精品6| 久久夜色撩人精品国产小说| 精品久久久久久国产牛牛app | 精品久久久久久综合日本| 久久精品亚洲一区二区三区浴池 | 99久久免费国产精品热| 久久综合综合久久综合| 久久久久无码精品国产| 91精品国产色综合久久| 青草影院天堂男人久久| 国产精品99久久不卡| 久久精品二区| 精品综合久久久久久98| 无码AV中文字幕久久专区| 99久久精品午夜一区二区| 欧美激情精品久久久久| 青青久久精品国产免费看| 久久精品国产久精国产果冻传媒| 久久久久久久久波多野高潮| 久久天天躁狠狠躁夜夜avapp| 日本精品久久久久中文字幕8| 久久性精品| 精品久久久无码人妻中文字幕豆芽 | 久久精品亚洲中文字幕无码麻豆| .精品久久久麻豆国产精品| 99久久成人18免费网站| 久久久一本精品99久久精品88| 久久亚洲中文字幕精品有坂深雪 | 久久亚洲私人国产精品| 国产精品久久久99| 久久香综合精品久久伊人| 精品国产福利久久久| 国产精品亚洲综合久久| 99久久精品国内| 无码国内精品久久人妻蜜桃| 国产激情久久久久影院小草| 久久亚洲春色中文字幕久久久| 99久久国产免费福利|