• <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>

            沐楓小筑(C++)

            愛老婆,要比編程多一點...

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              18 Posts :: 0 Stories :: 84 Comments :: 0 Trackbacks

            公告

            沐楓的個人主頁

            eoool.com生成

            eoool.com生成

            常用鏈接

            留言簿(8)

            我參與的團隊

            搜索

            •  

            積分與排名

            • 積分 - 56891
            • 排名 - 402

            最新評論

            閱讀排行榜

            評論排行榜

            2007年12月15日 #

            今天安裝svn服務器。上官網下載,發現windows下有一個稍微好用些的svn服務器。
            下載地址: http://www.visualsvn.com/server/

            這個東西有幾個特色:
            1. 安裝和配置過程很方便(最大優點之一)
            2. 自帶apache/ssl/mod_dav_svn/...等模塊,既小巧,又簡單,也安全一些。
            3. 自帶MSC管理工具,可以創建用戶、用戶組,還可以管理多個源碼庫,以及配置各個路徑的訪問權限(最大優點之二)

            通過上面下載地址,可以看到截圖。不過,截圖的版本稍低點。目前的版本是1.01。核心是Svn1.45,與官方同步。其實它也是為官方提供windows移植版的網站之一。

            需要注意的是,這個網站提供的VisualSVN Server是免費的,而客戶端VisualSVN是收費的。我們可以不用該客戶端,客戶端還是用TortoiseSVN/AnkhSVN之類的。 VisualSVN客戶端從介紹上看,與AkuhSVN是差不多的,只不過功能上略有優點。定價是$49。
            posted @ 2007-12-15 18:34 沐楓 閱讀(1572) | 評論 (1)編輯 收藏

            2007年11月30日 #

                從VC2003到VC2005,一直有一個很奇怪的問題。
                如下的代碼:
                short s1 = 0;
                
            short s2 = 2;

                s1 
            += s2;
                在這兩個編譯器的 /w4 四級警告打開的時候,就冒出以下的警告來:
            warning C4244: “+=”: 從“int”轉換到“short”,可能丟失數據
                為了消除這個警,只能將 += 拆成 = 和 +,如 s1 = s1 + s2。

                終于,這個問題在VC2008消失了。
            posted @ 2007-11-30 12:50 沐楓 閱讀(2269) | 評論 (7)編輯 收藏

            2007年10月17日 #

                沒想到漢語編程又有人開始網上對罵了。一方指另一方騙人,一方吹自已偉大。
                今天群里頭有人又把它翻出來了,剛好無聊,也就發明了一個漢語編程語言,集成到visual studio 2005的IDE中,名字就叫漢語編程++,歡迎同樣無聊的朋友試用。
            #include "常用頭文件"


            整數 主函數(整數 參數數量, 字符指針 參數 是數組)
            {
                整數 變量1 賦值為 
            3;
                如果(變量1 大于 
            0)
                {
                    打印(
            "可以中文編程\n");
                }

                系統命令(
            "Pause");
                返回 
            0;
            }


                運行結果就是:“可以中文編程”
                語法呢,就是C++一樣的,那個“常用頭文件”的內容如下:
            #define 整數 int
            #define 如果 if
            #define 大于 >
            #define 打印 printf
            #define 系統命令 system
            #define 賦值為 =
            #define 主函數 _tmain
            #define 字符指針 _TCHAR*
            #define 是數組 []
            #define 返回

            #include 
            <tchar.h>
            #include 
            <iostream>

                唯一美中不足的是,#include暫時無法漢化。于是勸群里的人用這個寫寫情書,結果,沒人響應...
                不過,#include 可以在項目屬性中去掉它(C++高級選項:強制包含),或是指定編譯命令參數 /FI "常用頭文件" ,這樣就可以去掉上面的“#include "常用頭文件"”了。  
            -----
            以上程序在VC++2005上編譯并運行通過。

            附群朋友的程序:
            高興不<>  19:54:59
            還真有這么玩的啊
            沐楓(Liny)()  19:55:02
            各位朋友,咱們提供一個頭文件,于是全中國人都可以用vc++2005來進行中文編程了。
            風在奔跑()  19:55:05
            我從來沒這么玩過.
            沐楓(Liny)()  19:55:19
            玩玩吧,挺好玩的。
            風在奔跑()  19:55:28
            干脆把所有函數用中文define成一個中文編程庫.
            沐楓(Liny)()  19:55:30
            不就是一堆#defing
            沐楓(Liny)()  20:13:43
            用這個寫情書吧各位。
            西瓜()  20:13:57
            女朋友不懂程序怎么辦
            TLAH()  20:13:58
            這樣的情書...球球不會喜歡的
            高興不<>  20:14:04
            。。。情書里就一個彈出的對話框"欲知詳情,請看代碼"
            西瓜()  20:14:17
            球球又沒出現

            TLAH()  
            20:19:00

            #define 趁還 while
            #define 那個啥 int
            #define 總的來說 main
            #define 買 cin
            #define 賣 cout
            #define 進 >>
            #define 出 <<
            #define 拜拜了 return
            #define 去掉 -=
            #define 等于 =
            #define 屁 100e4
            #define 我說 (
            #define 是吧 )
            #define 啊 a
            #define 那么就 {
            #define 得了 }
            #define 呀 ;
            #include 
            <iostream>
            using namespace std;

            那個啥 總的來說 我說 那個啥 啊 是吧
            那么就 那個啥 有錢 等于 屁 呀
            趁還 我說 有錢 是吧    那么就
            那個啥 多少 呀 買 進 多少 呀 賣 出 多少 呀 有錢 去掉 多少 呀
            賣 出 多少 呀 得了
            拜拜了 啊 呀 得了 

            高興不
            <>  20:19:30
            最有語義的中文編程誕生了 



            posted @ 2007-10-17 20:22 沐楓 閱讀(4096) | 評論 (38)編輯 收藏

            2007年9月27日 #

               C語言確實很優雅,整個語言的設計簡潔一致。而在C++中,有一個讓人詬病的問題就是變量初始化的不一致性。
               C語言中的初始化,都是用花括號進行,簡單美觀:

            int array[] = {1,2,3,4,5};
            struct Point point = {23};
            struct Point arrPoint[] = 
            {
              {
            2,3},
              {
            4,5},
              {
            6,7}
            };

               C++自然也兼容了C語言的初始化機制。然而,C++的Class乃至STL都不支持。它們要用不同的方式來初始化, 甚至根本不能夠直接初始化, 只能使用運行時的賦值。
               比如Class:
            class Param
            {
            public:
              
            int Age;
              
            int Value;
            private:
              
            int Level;
            };

            Param param 
            = {2,3}; // ERROR
            Param param = {2,3,4}; //ERROR
               無法初始化。而如果不初始化的話,所有的成員而處于無政府狀態,這顯然很不讓人放心。于是,C++提供了專門用于Class的初始化方式--構造函數:
            class Param
            {
            public:
              Param(
            int x, int y)
                : x_(x), y_(y)
              {}
              Param()
                : x_(
            0), y_(0)
              {}
            private:
              
            int x_, y_;
            };

            Param param(
            1,2);
            //
            Param param;
               有了構造函數,可以在構造函數的初始化列表中對成員進行初始化。可是很明顯,這里頭還是有一個陷阱,默認構造初始化和非默認構造初始化的調用方式是不一致的。默認構造函數不能用括號來調用,否則編譯器將會發瘋:
            Param param();
               它會把上面的語句看成是函數聲明,而后面調用的時候就會出錯,而錯誤信息可能會讓你抓狂一下。但是這樣也就算了,偏偏 new 可以接受有括號和沒括號兩種寫法:
            Param* p1 = new Param;
            Param
            * p2 = new Param();
               再來說說初始化列表。初始化列表,事實上,也只能支持簡單的標量類型,諸如int,bool,指針之類的;復雜點的,如數組、結構,不好意思,不支持--只能在構造函數體中進行賦值。還有一個很迷糊初學者的問題是,成員初始化的順序僅依賴于成員定義的順序,而不是初始化列表中的順序。

               再比如STL容器,這下好象更慘,連構造函數都幫不上忙了,除了初始化一個空的容器,或是復制一下別的容器,我們只能做用默認構造函數進行初始化。我們拿數組和vecotr做個比較:
            // 數組
            int arr[]={1,2,3,4};
            // vector
            vector<int> iarr;
            // 必須在某個函數中賦初值
            void init()
            {
              
            for(int i = 1; i <= 4++i) 
                iarr.push_back(i);
            }

               再復雜一點的數據結構,那單單賦值程序就要寫上老長,而且還不好看。還要記得調用。這對于僅僅是簡單的設置一些初值的用途來說,太過于煩瑣。

               橫向比較,這次好象C++還不會太落伍,只有C和動態語言提供了初始化特性,其它支持OO高級語言好象都是學C++的。如Java, C#(注C#3.0開始提供初始化功能)...
               
               C++能不能做到簡潔一致的實始化呢?
               Boost的assign庫做了許多有益的工作。使用assign庫,至少現在可以初始化了:
            vector<int> arr = list_of(1)(2)(3)(4);   

            typedef boost::tuple
            <int,std::string,int> tuple;
            vector
            <tuple> v = tuple_list_of( 1"foo"2 )( 3"bar"4 );

            map
            <int,int> next = map_list_of(1,2)(2,3)(3,4)(4,5)(5,6);

            stack
            <string> names = list_of( "Mr. Foo" )( "Mr. Bar")( "Mrs. FooBar" ).to_adapter();
               如果是賦值,也可以簡略很多:
            vector<int> v;
            += 1,2,3,repeat(10,4),5,6,7,8,9;
            // v = [1,2,3,4,4,4,4,4,4,4,4,4,4,5,6,7,8,9]
              不過,也僅能如此了。assign經過許多努力,也僅能支持容器的初始化,而且還不夠漂亮。

               C++0x已確定提供與C一致的初始化功能。 Initialer lists Initializer Lists for Standard Containers Initializer lists WP wording 等草案就是為了這個目的服務的。
               如果使用C++0x,那么程序的初始化將變得清晰和一致:
            complex<double> z = {1,2}; 
            //
            complex<double> z {1,2}; 
            // 初始化中,有等號和無等號都是允許的,下同。
            += {2,3};

            int a = {1}; 

            new vector<string>{"once""upon""a""time"}; 

            f( {
            "Nicholas""Annemarie"} ); // 參數是兩個元素的列表

            return { "Norah" }; // 返回只有一個元素的列表
             
            int* e {};  // 初始化為0或NULL指針

            map
            <string,int> anim = 

              {
            "bear",4}, 
              {
            "cassovary",2}, 
              {
            "tiger",7
            }; 

               這好象是C++欠了十多年的債吧。
               
            posted @ 2007-09-27 17:39 沐楓 閱讀(2694) | 評論 (6)編輯 收藏

            2007年9月26日 #

                一直在使用C/C++,對于循環語句while、do while、for,對于for情有獨鐘,因為其簡潔、清晰、靈活。訪問數組類型的變量,只有for寫出來的語句是最易于閱讀的,如:
            int arr[N] = {/**/};
            for(int i = 0; i < N; ++i)
              printf(
            "arr[%d] = %d\n", i, arr[i]);

                然而,這種情況,到了STL時,就有些變味了:
            for(vector<MyClass>::const_iterator iter = m_vecData.begin(); iter != m_vecData.end(); ++iter)
            {
                
            if(!iter->IsBusy())
                    iter
            ->DoSomeThing(param);
            }
                這么長的一個for,不再給人一種清晰的感覺了。或許因為這個程序比較短,還沒有太大的感覺,當回頭去看自已的程序中,有不少這樣的寫法時,我就覺得一陣心煩。改改?
            for(size_t i = 0; i < m_vecData.size(); ++i)
            {
                
            if(!m_vecData[i].IsBusy())
                    m_vecData[i].DoSomeThing(param);
            }
                不錯,還是簡單點好啊。但是因為這里舉的是vector的例子。如果是list或是別的什么容器,就行不通了。
                其它的高級語言,都提供了foreach或是for in語句,寫出來就很清晰:
            foreach(item in m_vecData)
            {
                
            if(!item.IsBusy())
                    item.DoSomeThing(param);
            }
                C++是不是也可以這么簡單?好象STL中也有一個for_each,試著改寫一下:
            struct IfNotBusyThenDoSomeThing
            {
               
            IfNotBusyThenDoSomeThing(const Param& param)
                    : param_(param)
                {}
                
            void operator() (const MyClass& item)
                {
                    
            if(!item.IsBusy())
                        item.DoSomeThing(param_);
                }
            private:
                
            const Param& param_;
            };

            for_each(m_vecData.begin(), m_vecData.end(),
            IfNotBusyThenDoSomeThing(param));
                不錯,for語句簡單了,但是卻多了IfNotBusyThenDoSomeThing的定義,這代碼可是多了好幾倍。要是每個循環都要來這么一下,我還不如直接寫for,要來得爽快一些。或許還有別的辦法:
            vector<MyClass> notBusyClass;
            remove_copy_if(m_vecData.begin(), m_vecData.end(), inserter(notBusyClass, notBusyClass.begin()), mem_fun_ref(
            &MyClass::IsBusy));
            for_each(notBusyClass.begin(), notBusyClass.end(), bind2nd(mem_fun_ref(
            &MyClass::DoSomeThing), param));
                天哪,這種寫法好象更恐怖。而且,還不是每種情況都能用的:
                1. notBusyClass不能是vector<const MyClass&>,因為不能建立指向引用的指針。這就要求MyClass是可拷貝的。但就算是可拷貝的,有時候拷貝成本也是很高的。
                2. MyClass::DoSomeThing的參數不能是引用(我們常定義參數為:const Param&),因為不能定義引用的引用這種類型。
                3. 一旦出現錯誤,這錯誤信息會讓人極其昏倒。

                看來單靠標準C++是不成的。Boost的lambda的庫似乎很不錯,用用:
                for_each(m_vecData.begin(), m_vecData.end(),
                    if_then( !bind(
            &MyClass::IsBusy, _1),
                        bind(
            &MyClass::DoSomeThing, _1, param)));
                不錯,好了一些,但是還是很不好看。有沒有更好的?有,boost1.34新加入的BOOST_FOREACH:
            BOOST_FOREACH(cosnt MyClass& item, m_vecData)
            {
                
            if(!item.IsBusy())
                    item.DoSomeThing(param);
            }
                Oh Yeah!

                好了,問題來了,為什么C++不直接在語言中提供foreach這個功能呢?
                個人認為,原因有幾點:
                1. C/C++除了數組外,沒有內置的容器,因此for語句足矣。
                2. 當C++進化到STL的時候,C++標準委員會根本沒空去考慮其它的。
                而其它高級語言之所以內置了foreach,就是因為它們一開始就提供了標準的容器庫和迭代/枚舉接口,因此提供foreach就順理成章了。

                現在,總算C++開始考慮,由模板引入而造成的代碼復雜性的問題,這的確是Cpper的福音。因此,一系列相關的提案被提交。牽涉到上面代碼中的提案就有: DecltypeLambda expressions and closures for C++proposal for new for-loop。  
                其中,最符合foreach要求的就是新的for循環。采用這個語句,上面的程序就可以這么寫:
            for(const MyClass& item : m_vecData)
            {
                
            if(!item.IsBusy())
                    item.DoSomeThing(param);
            }

                不過,考慮到Decltype&auto提案已經被采納,新的for-loop就不知道能不能再被采納。因為使用Decltype&auto后,程序可以這么寫:
            for(auto iter = m_vecData.begin(), end = m_vecData.end(); iter != end; ++iter)
            {
                if(!iter->IsBusy())
                    iter->DoSomeThing(param);
            }
                似乎還是復雜點是吧?但是有了decltype&auto后,foreach功能可以用程序庫或宏的形式被模擬,BOOST_FOREACH就是這么做的。具體模擬的方式<<proposal for new for-loop>>提案寫的很清楚了。
                同時,假如lambda提案要是能再被通過的話,那就真的要開心了:
            for_each(
              m_vecData, 
              
            <>(item) extern(param)
              {
                
            if(!item.IsBusy())
                    item.DoSomeThing(param);
              }
            );
                Cool!

                不過,VC++2008倒是增加了foreach功能,不過關鍵字不是foreach,而是for each,這個讓人有點郁悶.要用的時候最好用宏定義替換一下,免得可移植性上出現問題.

            posted @ 2007-09-26 19:51 沐楓 閱讀(16978) | 評論 (11)編輯 收藏

            2007年8月14日 #

            關于.net方面,已經有許多人在關注了,我就關注一下,VC2008方面的新東西吧。
            1. 暈倒,實證后,沒有增加tr1庫(僅增加了tr1::hexfloat).
            2. 對于模板的>>符號,中間不再需要空格了。
            3. 增加了for each(T& in A){}語法--這個不算是改進吧,估計是為了與.NET一起工作的產物。

            這是今天下午初步掃一眼VC2008中Native C++后的感覺。
            同時,標準庫已不再支持Win95/98/me和NT4了。

            至于C++/CLR,一個重要的部份就是STL/CLR。
            posted @ 2007-08-14 00:40 沐楓 閱讀(2939) | 評論 (6)編輯 收藏

            2007年7月21日 #

            這是入門級的隨筆,說的是函數對象的定義,使用,以及與函數指針,成員函數指針的關系。  閱讀全文
            posted @ 2007-07-21 21:36 沐楓 閱讀(1252) | 評論 (4)編輯 收藏

            2007年5月23日 #

            boost 1.34 終于簡化了內嵌python的支持。
            還支持了python2.5。
            在中文windows下用vc8編譯boost的過程中,雖然仍有代碼頁字符警告,但是可以正常編譯成功,不再象1.33.1那樣造成正則表達式庫不修改源碼不能夠編譯通過的問題了。

            下面的例子是從boost文檔中來的:
            #include <iostream>
            #include 
            <string>
            #include 
            <boost/python.hpp>
            #include 
            <boost/ref.hpp>
            #include 
            <vector>
            using namespace boost::python;

            void greet()
            {
                
            object main = import("__main__");
                
            object global(main.attr("__dict__"));

                
            // Define greet function in Python.
                object result = exec(
                    
            "def greet(a):               \n"
                    
            "   return 'Hello %s from Python!' % a \n",
                    global, global);

                
            object greet = global["greet"];

                list lst;
                lst.append(
            1);
                lst.append(
            2);

                
            object r = greet(lst);

                std::
            string message = extract<std::string>(r);
                std::cout 
            << message << std::endl;
            }

            int _tmain(int argc, _TCHAR* argv[])
            {
                Py_Initialize();
                greet();
                system(
            "Pause");
                
            return 0;
            }

            BTW:
              我用vc8編譯了全部的boost,然后,include加上lib目錄(內僅有lib和dll文件),合計2.68GB。

            posted @ 2007-05-23 12:58 沐楓 閱讀(1079) | 評論 (0)編輯 收藏

            2007年5月13日 #

            昨天,boost終于發布了1.34版本。該版本新增加了幾個內容:
            1. BOOST_FOREACH 宏
              一直對于C++的iterator枚舉元素造成的bad smell感到無奈,同時,許多語言都增加了foreach機制。終于,boost增加了這個枚舉工具。從此,C++的枚舉不再難看。如:

            #define foreach BOOST_FOREACH
            short array_short[] = { 123 };
            foreachshort & i, array_short )
            {
                
            ++i;
            }

              BOOST_FOREACH宏大大改良了代碼可讀性。

              上述程序執行后,array_short的內容為:{2,3,4}。 

            2. 狀態圖
              隨著工作流(WorkFlow)的流行,Boost也加入了狀態機。這對于程序結構的優化,將是一個好的補充。
            3. Tr1
              隨著C++0x的進展,Tr1已經被通過。下一次Boost可能將增加Tr2了。
            4. Typeof 庫
              C++0x中的auto的替代品。時常關心C++0x進展的人就會知道auto的作用,現在終于可以提前使用了。只是沒有auto漂亮,目前也僅能如此了,畢竟它現在能工作。
            5. Xpressive庫
              屬于C++的正則表達式庫。以前都是用字串來保存正則表達式,現在終于可以用C++的表達式來寫正則了。

            http://www.boost.org

            posted @ 2007-05-13 22:24 沐楓 閱讀(1420) | 評論 (0)編輯 收藏

            2006年8月8日 #

            摘要:  在這里,我想向大家介紹如何進行Lua程序設計。

            全文:Lua腳本入門
            posted @ 2006-08-08 13:09 沐楓 閱讀(1846) | 評論 (0)編輯 收藏

            2006年6月29日 #

            用bitset進行2進制輸入輸出
            posted @ 2006-06-29 10:14 沐楓 閱讀(2210) | 評論 (1)編輯 收藏

            2006年4月6日 #

            匯編語言沒有我想象的那么低級,它已經具備了不少高級語言的特性,代碼也變得清晰,層次清楚,易于維護了。
            全文見:匯編語言的Hello World
            posted @ 2006-04-06 12:05 沐楓 閱讀(1067) | 評論 (1)編輯 收藏

            2006年3月13日 #

              C語言的指針相當的靈活方便,但也相當容易出錯。許多C語言初學者,甚至C語言老鳥都很容易栽倒在C語言的指針下。但不可否認的是,指針在C語言中的位置極其重要,也許可以偏激一點的來說:沒有指針的C程序不是真正的C程序。
              然而C++的指針卻常常給我一種束手束腳的感覺。C++比C語言更加強調強類型,強調類型安全,強調編譯時檢查。因此,對于C語言中最容易錯用的指針,更是不能放過:C++的指針被分成數據指針,數據成員指針,函數指針,成員函數指針,而且不能隨便相互轉換。而且這些指針的聲明格式都不一樣:

            數據指針 T *
            成員數據指針 T::*
            函數指針 R (*)(...)
            成員函數指針 R (T::*)(...)

              盡管C++中仍然有萬能指針void*,但它卻屬于被批斗的對象,而且再也不能“萬能”了。它不能轉換成成員指針。

              這樣一來,C++的指針就變得很尷尬:我們需要一種指針能夠指向同一類型的數據,不管這個數據是普通數據,還是成員數據;我們更需要一種指針能夠指向同一類型的函數,不管這個函數是靜態函數,還是成員函數。但是沒有,至少從現在的C++標準中,還沒有看到。

            全文見 《C++指針探討 (三) 成員函數指針

            posted @ 2006-03-13 16:44 沐楓 閱讀(942) | 評論 (0)編輯 收藏

            2005年12月17日 #

            在C/C++中,數據指針是最直接,也最常用的,因此,理解起來也比較容易。而函數指針,作為運行時動態調用(比如回調函數 CallBack Function)是一種常見的,而且是很好用的手段。

            注:這一部份沒什么價值,純是為了引出下一節的內容。

            請點此處閱讀全文:C++指針探討 (二) 函數指針
            posted @ 2005-12-17 11:53 沐楓 閱讀(1169) | 評論 (0)編輯 收藏

            2005年11月30日 #

            指針,在C/C++語言中一直是很受寵的;幾乎找不到一個不使用指針的C/C++應用。用于存儲數據和程序的地址,這是指針的基本功能。用于指向整型數,用整數指針(int*);指向浮點數用浮點數指針(float*);指向結構,用對應的結構指針(struct xxx *);指向任意地址,用無類型指針(void*)。
            本文先探討C++中用于存儲各種類型數據的指針。

            ——全文請見:C++指針探討 (一)數據指針
            posted @ 2005-11-30 11:12 沐楓 閱讀(883) | 評論 (0)編輯 收藏

            久久国产精品无码网站| 国产巨作麻豆欧美亚洲综合久久| 久久久艹| 少妇无套内谢久久久久| 亚洲人成网亚洲欧洲无码久久 | 午夜不卡久久精品无码免费| 97久久婷婷五月综合色d啪蜜芽| 99久久无色码中文字幕人妻| 97精品久久天干天天天按摩| 99久久精品无码一区二区毛片 | 精品综合久久久久久88小说| 国产精品久久久久久久久软件| 奇米综合四色77777久久| 国内精品久久国产大陆| 亚洲国产成人精品女人久久久| 久久人人爽人人爽人人片av麻烦 | 亚洲狠狠婷婷综合久久久久| 久久99精品久久久久婷婷| 久久久久亚洲精品中文字幕| 无码任你躁久久久久久久| 亚洲欧美另类日本久久国产真实乱对白| 少妇久久久久久久久久| 久久综合一区二区无码| 精品久久久久久无码中文字幕一区 | 久久久这里只有精品加勒比| 久久99精品国产麻豆宅宅 | 久久精品人人槡人妻人人玩AV| 国内精品久久久久国产盗摄| 久久综合给合久久狠狠狠97色| 精品国产热久久久福利| 国产亚洲综合久久系列| 久久99热这里只频精品6| 久久se精品一区二区影院| 久久99精品久久久久久hb无码| 一本久久免费视频| 久久久WWW成人免费精品| 青青草原1769久久免费播放| 精品人妻久久久久久888| 亚洲精品国产字幕久久不卡| 久久综合噜噜激激的五月天| 久久亚洲sm情趣捆绑调教|