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

            loop_in_codes

            低調做技術__歡迎移步我的獨立博客 codemaro.com 微博 kevinlynx

            共6頁: 1 2 3 4 5 6 
            re: 正確處理隨機選擇 Kevin Lynx 2009-03-23 13:18
            @陳梓瀚(vczh)
            我給徹底搞混了。回頭對比兩段代碼,囧,居然是一樣的。
            那第一種方法也應該是公平的。我把自己搞昏了,也把好幾個策劃搞昏了。

            這次臉丟大了。
            re: luckyScript測試程序:計算器 Kevin Lynx 2009-03-20 15:15
            單就這篇博文而言,除了展示了段腳本代碼外,沒什么有用的東西。我同意cppexplore的說法
            re: 面試中碰到的一個C++陷阱 Kevin Lynx 2009-03-18 14:08
            @wocow3
            我剛寫了點測試代碼,發現我們樓上的幾位觀點都有點小錯誤。
            是的,成員函數指針比普通的指針復雜得多。例如:
            class Test
            {
            public:
            virtual void print() {}
            };

            printf( "%d\n", sizeof( &Test::print ) );

            就以上代碼,我在VS2005下得出的結果是4(如我們所說),但是在gcc下得出的卻是8!而gcc對于一般的函數(C函數)指針卻是4.

            并且,
            typedef void (Test::*mem_fn_ptr)();
            mem_fn_ptr p = &Test::print;
            printf( "%d\n", p );
            的結果在不同的編譯器上也不同,gcc得出的如我所想,是一個偏移值,而VC則始終給出一個真正的地址值。更為奇怪的是,在gcc下去掉virtual關鍵字,即讓print為一個普通函數,那么其值也為一個真正的地址值。

            看來,這個面試官考的也許正是這個。無論如何,一個成員函數指針不同于普通指針。
            參考:http://www.codeproject.com/KB/cpp/FastDelegate.aspx
            re: 面試中碰到的一個C++陷阱 Kevin Lynx 2009-03-18 13:28
            大家應該明確下這里討論的東西,【虛函數指針】,終究來說還是指針,32位機器上就是32位。我覺得博主在這里和大家討論并沒有針對指針這個概念。成員函數指針也是個指針,也是32位,但是其指針值不同一般指針。

            面試官問你的問題如果類似于:xxxx指針有多大。。那很明顯,要么是他表述問題的能力有問題,要么是其真的不懂這些東西。面試你的人不見得就比你牛。
            re: linux和unix的區別(轉) Kevin Lynx 2009-03-16 11:40
            其實這樣說并不全面。
            unix發展到后來,已經并不僅僅指的是60年代那個開發出來的操作系統,而成為一種標準,基本上凡是符合該標準的OS都可稱為unix。linux,bsd,solaris之類都可以被稱為unix。

            詳見:
            http://en.wikipedia.org/wiki/Unix
            http://en.wikipedia.org/wiki/Single_UNIX_Specification
            unix規格說明文檔中描述,凡是符合此標準的OS,都可使用unix商標。(大致是這樣的)
            @夢在天涯
            這個例子是用于判定一個字符串是否全部是數字,不過例子中寫的有問題,應該是:
            int is_number( const char *str )
            {
            while( *str != 0 )
            {
            if( !isdigit( *str++ ) ) return 0;
            }
            return 1;
            }

            謝謝提醒。
            re: STL容器誤用一則 Kevin Lynx 2009-03-11 09:22
            存檔的指針指向的內存是由你自己來維護的,不是set來維護,所有有內存泄露,也是你自己的錯誤。

            std::sort不能對std::list進行排序,那是因為std::sort只能對random-access iterator進行操作,std::list::iterator不是random-access的。所以std::list才自己提供了sort函數。

            詳細參看std::sort文檔
            @陳梓瀚(vczh)
            貌似是的,后面對于錯誤的處理,甚至最基本的錯誤報告(定位)都存在問題。對這塊不熟,沒管了。
            cout << this->foreach( this->test1, 4, 5);
            改為:
            cout << this->foreach( &GridTest::test1, 4, 5);

            對于C函數來說,函數名直接表示其函數地址,但是對于成員函數而言,則必須使用&ClassName::memFn才表示該成員函數的地址。gcc對C++語法要求更嚴格。

            第三個確實詭異,不過C支持那樣的代碼是有原因的:
            http://en.wikipedia.org/wiki/C_trigraph#C
            為了支持一些沒有\符號的鍵盤。
            re: 玩了一下alienbrain的EventsScript Kevin Lynx 2009-03-01 13:22
            @陳梓瀚(vczh)
            這個宏定義在哪里?定義在代碼文件里的話肯定不起作用(會把定義的地方也簽入),在工程設置里定義會簽出工程文件。
            @劍神一笑

            你說的有道理。我也越來越喜歡UNIX的東西了。:)
            re: 開發環境安裝完占用的空間 Kevin Lynx 2009-01-23 21:26
            ......16G..............
            PEB結構是TEB結構的成員?
            struct TEB
            {
            ...
            struct PEB
            {
            ....
            ??

            MSDN:
            typedef struct _TEB{
            BYTE Reserved1[1952];
            PVOID TlsSlots[64];
            ...

            typedef struct _PEB{
            BYTE Reserved1[2];
            BYTE BeingDebugger; //是有個標志標示進程是否被調試
            ...
            從你的文章來看,PEB應該在TEB偏移0x30H字節的地方,但是從MSDN的TEB結構定義來看,PEB位于Reserved1[1952]中的某個位置?
            re: 匯編,讓你更拉風 Kevin Lynx 2009-01-10 10:02
            沙發
            re: 小寫了個XML解析器 Kevin Lynx 2009-01-08 09:07
            @胖dudu
            不用自己做了。BSD(相關組織)早使用宏寫了一套數據結構,鏈表,樹,等等。
            re: VS2005斷點失效的問題 Kevin Lynx 2009-01-05 08:59
            這種情況不解決辦法有 很多。你這個方法我沒用過。最簡單的方法就是ctrl+a, ctrl+f重新格式化這個‘不可調試’的CPP文件,然后編譯該CPP文件,一般就可以解決。當然,有時候也無法解決。
            @CK
            這里說的就是DEBUG模式。
            re: 讓人無語的boost[未登錄] Kevin Lynx 2008-12-28 18:16
            :)
            不開RTTI,typeid只對靜態類型有效了,也就是只對編譯器就可以確定的類型有效。
            re: 最近接觸的東西 Kevin Lynx 2008-12-12 17:43
            @aa
            你對我寫這些代碼的前提誤會了。這些代碼是我讀書的時候在寢室寫的。整個周期沒有那么復雜,就是自己決定做個什么小游戲,然后寫設計文檔,然后開始編碼,游戲運行基本良好就算完成。然后開始寫下個東西。那個時候是每天早上8點起床到晚上1點左右,排除吃飯時間,基本坐在電腦前。當然,每做完一個東西的時候會有幾天的休息。也會有很長一段時間用于看書。我還是肯定地告訴你,是10W行,可以用行數統計工具統計的10W行。當然,我承認,這10W行代碼沒什么技術含量。
            re: 最近接觸的東西 Kevin Lynx 2008-12-12 15:51
            @aa
            我認為注釋、空行都算作源代碼的一部分。如果你面對沒有空行和注釋的代碼,你會覺得這個代碼怎樣?沒有統計第三方庫代碼,自己的代碼可能有重復統計。需要的話我把這些代碼發你你統計。
            re: VIM學習 Kevin Lynx 2008-12-11 09:17
            vim可以讓你的手不用離開鍵盤去摸鼠標,甚至不用去摸方向鍵。
            re: cygwin 使用 Kevin Lynx 2008-12-11 09:16
            當初在選擇cygwin和mingw(雖然兩者功能不盡相同)的時候,本來是選擇cygwin的,因為有更多的linux工具可用,mingw則可能只是一個gcc的移植,用setup在線安裝的時候總是不成功,懷疑是網速過慢。于是只好裝mingw了。
            re: 小寫了個XML解析器 Kevin Lynx 2008-12-11 08:50
            @肥仔
            - -!
            我恰好說了,如果parent直接保存children,好占空間的,例如你這個vector,雖然我的處理方式累了點。- -!
            - -|

            我還以為是什么。。。

            @嘯天豬
            STL predicator不會要求是純虛函數性質,唯一的要求就是這是一個具有operator()性質的東西,普通C函數,重載了operator() 的類均可。我文章里說的問題在于,函數不是:
            bool operator() ( .... ) const // 需要加上const
            {
            }

            TU是不是編譯單元?如果是標準規定,哥們可以給我下文檔鏈接不?

            @Xw.Y

            我的問題同你的本質是一樣的。

            @Jetricy
            作為一個STL USER,我還是要捍衛下STL的質量。
            @浪跡天涯
            老實說,實際項目里還沒用過memcached。
            @浪跡天涯
            改造網絡模型?不清楚。我只知道使用別人的庫。- -|
            雖然以前知道你發的這些文章,但是很少看過,理由很簡單,我覺得要用一些閑暇時間去看你的文章,是不夠的。

            今天終于看完了你這個系列的第二篇,并且看了代碼。大致上算理解了你這篇文章講的東西。感覺就是,設計和代碼都很老練。
            據以前在金山工作過的兩個朋友所說,金山加班嚴重(就是成都金山),不敢去。想多活幾年。
            @Fox
            從設計角度來看,即使destructor是trivial的,但是因為基類和派生類存在多態的使用,即對于應用層而言有類似的代碼:
            base *pObj = new derived();
            那么,destructor都應該為virtual的。
            re: 讓人無語的boost[未登錄] Kevin Lynx 2008-10-15 23:45
            @littlewater
            boost::any用到了typeid,這個東西不開RTTI還是可以工作的,但是對于具有vtable的類,要讓typeid工作,就需要開RTTI。
            @megax
            你這樣說有點不對,指針參數不見得就會保存該指針。
            事實上,doc確實沒保存printer,粗略地看了下這塊的代碼,Accept純碎是將一些信息輸出到printer而已。

            今天發現boost果然有這么一個宏庫:
            http://www.boost.org/doc/libs/1_36_0/libs/preprocessor/doc/index.html

            然后在<C++ Template Metaprogramming>一書里也看到類似的闡述:
            http://www.boostpro.com/tmpbook/preprocessor.html

            原來我又重造了一次輪子,還沒造好。 = =|
            剛我自己復制了你的代碼嘗試了下,
            TinyXml 2.5.3 vs2005 沒有出現你說的錯誤 = =
            我也閱讀了TiXmlPrinter 的文檔,發現我可能說錯了。
            我用TinyXML雖然沒用過TiXmlPrinter ,但是,從你的代碼來看,我個人感覺就有點問題:

            doc.Accept( &printer );

            從接口使用來看,Accept接受了一個指針,那么doc內部可能只保存該指針,而不是完全復制printer對象,那么,在BuildXMLFile退出后,printer對象destruct。假設Document和Printer在關于Accept這個動作之間有指針所有權改變的動作,那么這個自動destruct動作就可能導致問題。

            將這些代碼都放在同一個作用域里不出問題,也是我做這樣推斷的理由之一。
            re: 代碼自動生成-宏遞歸思想 Kevin Lynx 2008-09-17 09:52
            @littlewater
            依然不明白什么是“這一輪繼續被遞歸”,更不明白你寫下的
            “DEF_XXX( template <typename R, typename P1> class functor<R(P1)>; )

            是為了說明什么。

            我推測,你的意思是說,當宏參數本身也是一個宏,而這個宏的宏體內有逗號時,將會出現歧義:
            #define PARAM typename P1,
            #define DEF_PARAM( a, b ) something

            DEF_PARAM( PARAM, something ); 時,在展開宏體時就會出現DEF_PARAM( typename P1, , something ) 就會出現兩個逗號。

            解決這個問題的辦法時,不讓PARAM宏提前展開。

            宏展開的一個規則是:如果某個宏(如DEF_PARAM)的宏實參也是一個宏(如PARAM),那么在展開這個宏之前,會先展開宏實參,并將展開后的宏體替換到宏中,然后第二次掃描,如果還有宏,則繼續展開。

            所以,解決辦法就是,讓實參不是一個宏!

            宏展開還有一個規則是:即使宏實參是一個宏,但是這個宏具有括號屬性,例如
            #define PARAM( n ) ,typename P##n 中PARAM宏就是這么一個具有括號屬性的宏,該宏作為宏實參時,如果沒有提供其參數,那么它將被作為普通符號,而不是一個宏。

            因此,在代碼kl_macro_params.h中:
            #define PARAM( n ) ,typename P##n
            #define DEF_PARAM( n ) REPEAT_##n( n, PARAM, PARAM_END )

            若DEF_PARAM( 2 ) 時,會得到REPEAT_2( 2, PARAM, PARAM_END )展開REPEAT_2宏時,并不會先展開PARAM,因為PARAM是一個具有括號屬性的宏,如果展開,那么將出現你說的問題。
            re: 代碼自動生成-宏遞歸思想 Kevin Lynx 2008-09-16 16:10
            #define PARAM( n ) ,typename P##n
            #define PARAM_END typename P1

            去掉那個逗號不就可以了?

            有些不明白littlewater意思。
            @littlewater
            我感覺更多地是對線程的描述吧?
            @czc
            非常高興有人可以給我提出如此寶貴的意見!我覺得很少有人會把我寫的東西認真讀過,甚至相關代碼。

            1)我覺得你是對的,我認為只要類模板被實例化,就相當于產生了一個類,那么就會產生這個static變量。但是typedef很可能沒有實例化類模板,所以我覺得你是對的,但是如何去證明這一點?

            2)你說的完全正確。當lua_binder被用于實際項目時,我也發現了這個問題,所以最后我只得用一個ID去區分這些binder:
            template <typename Prototype, long id>
            class lua_binder;
            上層代碼就不得不自己提供一個唯一的ID,很丑陋,但是我沒有想到優雅的解決辦法,不知道你有沒有什么看法?
            re: tcp要點學習-建立連接 Kevin Lynx 2008-09-05 09:30
            加上正常關閉closesocket之類,在程序未退出前不要ctrl+c強制退出。你試下這些。我做實驗也是在WIN平臺下。
            re: tcp要點學習-建立連接 Kevin Lynx 2008-09-04 13:54
            @thinkinnight
            發送RST通常都是因為異常退出導致的。可能你沒有正常關閉。
            re: 實現自己的http server Kevin Lynx 2008-09-04 13:53
            @dikatour
            這個測試例子確實可能出現這樣的問題。但是在klhttpd中則不會存在,response的內容都交給應用層去做。

            re: *a++與(*a)++的區別[未登錄] Kevin Lynx 2008-09-01 11:43
            *A++ 先返回A,然后計算*A,那么這個表達式返回的值就是*A,然后A++,將A自身改變

            (*A)++,先計算*A的值,這個表達式返回的值就是*A,然后A指向的變量值++

            average的例子直接取得<C++ template>呀,模板遞歸的例子也是模板元里的常見例子。

            這些東西有什么用?當你有這個思想時,你會發現它非常有用。說沒用的人,那是他自己根本不懂。
            re: "multiple definition of" 錯誤 Kevin Lynx 2008-08-27 08:59
            概念性問題而已。

            const int a = 12; 表示a 是個常量
            const char * STR_TEST = "Hello world!";表示STR_TEST指向的內容是常量,但其本身(作為一個指針變量而言)不是一個常量。
            所以:
            char * const STR_TEST = ".." 即可
            cppblog人才輩出,不敢說話了。
            我是真的來灌水......
            通過functor,可以做到將成員函數,C式函數,operator(),等綁定為線程函數.
            我覺得這種方式起碼比繼承重寫某個虛函數來得靈活.
            看來很多人都偏向于回調啊。我剛開始也打算用回調,但是leader說這樣很麻煩。我們原有的腳本系統就是采用掛起的方式。如果采用回調,那么對于sleep這樣的操作你們是怎么做的?
            @創
            確實,這個也算不做造輪子。之前我基本上將SGI的內存池翻譯成C代碼,所以我對那一塊比較熟悉。一看你的代碼,我就覺得很眼熟。:D

            @金哥
            同意你的說法。我覺得我們周圍有很多程序員都抱著這樣的想法。他們總以“不重造輪子”的觀點告誡自己,從而不知道很多東西的底層實現原理。就像有些程序員以“盲目的優化只會適得其反”這樣觀點為理由,而忽視了優化的重要性一樣。

            不重造輪子,是基于你懂得造輪子的原理基礎上的。而如果你自己都不懂,連重造輪子的能力都沒有,那基本就比重造輪子的人還差了。
            共6頁: 1 2 3 4 5 6 
            久久精品国产亚洲精品2020| 久久人与动人物a级毛片| 一本色道久久88精品综合| 久久影视综合亚洲| 亚洲色欲久久久久综合网| 欧美久久亚洲精品| 一个色综合久久| 人妻无码αv中文字幕久久| 无码人妻少妇久久中文字幕蜜桃| 亚洲国产另类久久久精品小说| 国产香蕉久久精品综合网| 久久精品免费一区二区| 亚洲色大成网站WWW久久九九| 伊人久久久AV老熟妇色| 国产精品99久久精品| 久久久久国产一区二区| 欧美亚洲国产精品久久久久| 精品久久久无码人妻中文字幕| 久久精品中文闷骚内射| 91久久精品电影| 一本一道久久a久久精品综合| 狠狠色婷婷久久综合频道日韩| 一本色道久久99一综合| 色综合色天天久久婷婷基地| 久久精品无码一区二区三区日韩| 亚洲精品第一综合99久久 | 国产A级毛片久久久精品毛片| 久久久噜噜噜久久中文字幕色伊伊| 国产成人精品久久| 狠狠色伊人久久精品综合网| 中文字幕精品久久| 99久久99这里只有免费的精品| 久久香蕉国产线看观看猫咪?v| 中文字幕无码免费久久| 四虎国产精品免费久久5151| 久久亚洲AV无码精品色午夜麻豆 | 亚洲中文字幕久久精品无码APP| 国产午夜免费高清久久影院| 伊人久久无码精品中文字幕| 91精品观看91久久久久久| 亚洲色欲久久久综合网东京热|