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

            低調(diào)做技術(shù)__歡迎移步我的獨(dú)立博客 codemaro.com 微博 kevinlynx

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

            這次臉丟大了。
            單就這篇博文而言,除了展示了段腳本代碼外,沒(méi)什么有用的東西。我同意cppexplore的說(shuō)法
            re: 面試中碰到的一個(gè)C++陷阱 Kevin Lynx 2009-03-18 14:08
            @wocow3
            我剛寫了點(diǎn)測(cè)試代碼,發(fā)現(xiàn)我們樓上的幾位觀點(diǎn)都有點(diǎn)小錯(cuò)誤。
            是的,成員函數(shù)指針比普通的指針復(fù)雜得多。例如:
            class Test
            {
            public:
            virtual void print() {}
            };

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

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

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

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

            面試官問(wèn)你的問(wèn)題如果類似于:xxxx指針有多大。。那很明顯,要么是他表述問(wèn)題的能力有問(wèn)題,要么是其真的不懂這些東西。面試你的人不見(jiàn)得就比你牛。
            其實(shí)這樣說(shuō)并不全面。
            unix發(fā)展到后來(lái),已經(jīng)并不僅僅指的是60年代那個(gè)開(kāi)發(fā)出來(lái)的操作系統(tǒng),而成為一種標(biāo)準(zhǔn),基本上凡是符合該標(biāo)準(zhǔn)的OS都可稱為unix。linux,bsd,solaris之類都可以被稱為unix。

            詳見(jiàn):
            http://en.wikipedia.org/wiki/Unix
            http://en.wikipedia.org/wiki/Single_UNIX_Specification
            unix規(guī)格說(shuō)明文檔中描述,凡是符合此標(biāo)準(zhǔn)的OS,都可使用unix商標(biāo)。(大致是這樣的)
            @夢(mèng)在天涯
            這個(gè)例子是用于判定一個(gè)字符串是否全部是數(shù)字,不過(guò)例子中寫的有問(wèn)題,應(yīng)該是:
            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
            存檔的指針指向的內(nèi)存是由你自己來(lái)維護(hù)的,不是set來(lái)維護(hù),所有有內(nèi)存泄露,也是你自己的錯(cuò)誤。

            std::sort不能對(duì)std::list進(jìn)行排序,那是因?yàn)閟td::sort只能對(duì)random-access iterator進(jìn)行操作,std::list::iterator不是random-access的。所以std::list才自己提供了sort函數(shù)。

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

            對(duì)于C函數(shù)來(lái)說(shuō),函數(shù)名直接表示其函數(shù)地址,但是對(duì)于成員函數(shù)而言,則必須使用&ClassName::memFn才表示該成員函數(shù)的地址。gcc對(duì)C++語(yǔ)法要求更嚴(yán)格。

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

            你說(shuō)的有道理。我也越來(lái)越喜歡UNIX的東西了。:)
            ......16G..............
            PEB結(jié)構(gòu)是TEB結(jié)構(gòu)的成員?
            struct TEB
            {
            ...
            struct PEB
            {
            ....
            ??

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

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

            我還以為是什么。。。

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

            TU是不是編譯單元?如果是標(biāo)準(zhǔn)規(guī)定,哥們可以給我下文檔鏈接不?

            @Xw.Y

            我的問(wèn)題同你的本質(zhì)是一樣的。

            @Jetricy
            作為一個(gè)STL USER,我還是要捍衛(wèi)下STL的質(zhì)量。
            @浪跡天涯
            老實(shí)說(shuō),實(shí)際項(xiàng)目里還沒(méi)用過(guò)memcached。
            @浪跡天涯
            改造網(wǎng)絡(luò)模型?不清楚。我只知道使用別人的庫(kù)。- -|
            雖然以前知道你發(fā)的這些文章,但是很少看過(guò),理由很簡(jiǎn)單,我覺(jué)得要用一些閑暇時(shí)間去看你的文章,是不夠的。

            今天終于看完了你這個(gè)系列的第二篇,并且看了代碼。大致上算理解了你這篇文章講的東西。感覺(jué)就是,設(shè)計(jì)和代碼都很老練。
            據(jù)以前在金山工作過(guò)的兩個(gè)朋友所說(shuō),金山加班嚴(yán)重(就是成都金山),不敢去。想多活幾年。
            @Fox
            從設(shè)計(jì)角度來(lái)看,即使destructor是trivial的,但是因?yàn)榛惡团缮惔嬖诙鄳B(tài)的使用,即對(duì)于應(yīng)用層而言有類似的代碼:
            base *pObj = new derived();
            那么,destructor都應(yīng)該為virtual的。
            @littlewater
            boost::any用到了typeid,這個(gè)東西不開(kāi)RTTI還是可以工作的,但是對(duì)于具有vtable的類,要讓typeid工作,就需要開(kāi)RTTI。
            @megax
            你這樣說(shuō)有點(diǎn)不對(duì),指針參數(shù)不見(jiàn)得就會(huì)保存該指針。
            事實(shí)上,doc確實(shí)沒(méi)保存printer,粗略地看了下這塊的代碼,Accept純碎是將一些信息輸出到printer而已。

            今天發(fā)現(xiàn)boost果然有這么一個(gè)宏庫(kù):
            http://www.boost.org/doc/libs/1_36_0/libs/preprocessor/doc/index.html

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

            原來(lái)我又重造了一次輪子,還沒(méi)造好。 = =|
            剛我自己復(fù)制了你的代碼嘗試了下,
            TinyXml 2.5.3 vs2005 沒(méi)有出現(xiàn)你說(shuō)的錯(cuò)誤 = =
            我也閱讀了TiXmlPrinter 的文檔,發(fā)現(xiàn)我可能說(shuō)錯(cuò)了。
            我用TinyXML雖然沒(méi)用過(guò)TiXmlPrinter ,但是,從你的代碼來(lái)看,我個(gè)人感覺(jué)就有點(diǎn)問(wèn)題:

            doc.Accept( &printer );

            從接口使用來(lái)看,Accept接受了一個(gè)指針,那么doc內(nèi)部可能只保存該指針,而不是完全復(fù)制printer對(duì)象,那么,在BuildXMLFile退出后,printer對(duì)象destruct。假設(shè)Document和Printer在關(guān)于Accept這個(gè)動(dòng)作之間有指針?biāo)袡?quán)改變的動(dòng)作,那么這個(gè)自動(dòng)destruct動(dòng)作就可能導(dǎo)致問(wèn)題。

            將這些代碼都放在同一個(gè)作用域里不出問(wèn)題,也是我做這樣推斷的理由之一。
            @littlewater
            依然不明白什么是“這一輪繼續(xù)被遞歸”,更不明白你寫下的
            “DEF_XXX( template <typename R, typename P1> class functor<R(P1)>; )

            是為了說(shuō)明什么。

            我推測(cè),你的意思是說(shuō),當(dāng)宏參數(shù)本身也是一個(gè)宏,而這個(gè)宏的宏體內(nèi)有逗號(hào)時(shí),將會(huì)出現(xiàn)歧義:
            #define PARAM typename P1,
            #define DEF_PARAM( a, b ) something

            DEF_PARAM( PARAM, something ); 時(shí),在展開(kāi)宏體時(shí)就會(huì)出現(xiàn)DEF_PARAM( typename P1, , something ) 就會(huì)出現(xiàn)兩個(gè)逗號(hào)。

            解決這個(gè)問(wèn)題的辦法時(shí),不讓PARAM宏提前展開(kāi)。

            宏展開(kāi)的一個(gè)規(guī)則是:如果某個(gè)宏(如DEF_PARAM)的宏實(shí)參也是一個(gè)宏(如PARAM),那么在展開(kāi)這個(gè)宏之前,會(huì)先展開(kāi)宏實(shí)參,并將展開(kāi)后的宏體替換到宏中,然后第二次掃描,如果還有宏,則繼續(xù)展開(kāi)。

            所以,解決辦法就是,讓實(shí)參不是一個(gè)宏!

            宏展開(kāi)還有一個(gè)規(guī)則是:即使宏實(shí)參是一個(gè)宏,但是這個(gè)宏具有括號(hào)屬性,例如
            #define PARAM( n ) ,typename P##n 中PARAM宏就是這么一個(gè)具有括號(hào)屬性的宏,該宏作為宏實(shí)參時(shí),如果沒(méi)有提供其參數(shù),那么它將被作為普通符號(hào),而不是一個(gè)宏。

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

            若DEF_PARAM( 2 ) 時(shí),會(huì)得到REPEAT_2( 2, PARAM, PARAM_END )展開(kāi)REPEAT_2宏時(shí),并不會(huì)先展開(kāi)PARAM,因?yàn)镻ARAM是一個(gè)具有括號(hào)屬性的宏,如果展開(kāi),那么將出現(xiàn)你說(shuō)的問(wèn)題。
            #define PARAM( n ) ,typename P##n
            #define PARAM_END typename P1

            去掉那個(gè)逗號(hào)不就可以了?

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

            1)我覺(jué)得你是對(duì)的,我認(rèn)為只要類模板被實(shí)例化,就相當(dāng)于產(chǎn)生了一個(gè)類,那么就會(huì)產(chǎn)生這個(gè)static變量。但是typedef很可能沒(méi)有實(shí)例化類模板,所以我覺(jué)得你是對(duì)的,但是如何去證明這一點(diǎn)?

            2)你說(shuō)的完全正確。當(dāng)lua_binder被用于實(shí)際項(xiàng)目時(shí),我也發(fā)現(xiàn)了這個(gè)問(wèn)題,所以最后我只得用一個(gè)ID去區(qū)分這些binder:
            template <typename Prototype, long id>
            class lua_binder;
            上層代碼就不得不自己提供一個(gè)唯一的ID,很丑陋,但是我沒(méi)有想到優(yōu)雅的解決辦法,不知道你有沒(méi)有什么看法?
            加上正常關(guān)閉closesocket之類,在程序未退出前不要ctrl+c強(qiáng)制退出。你試下這些。我做實(shí)驗(yàn)也是在WIN平臺(tái)下。
            @thinkinnight
            發(fā)送RST通常都是因?yàn)楫惓M顺鰧?dǎo)致的??赡苣銢](méi)有正常關(guān)閉。
            @dikatour
            這個(gè)測(cè)試?yán)哟_實(shí)可能出現(xiàn)這樣的問(wèn)題。但是在klhttpd中則不會(huì)存在,response的內(nèi)容都交給應(yīng)用層去做。

            *A++ 先返回A,然后計(jì)算*A,那么這個(gè)表達(dá)式返回的值就是*A,然后A++,將A自身改變

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

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

            這些東西有什么用?當(dāng)你有這個(gè)思想時(shí),你會(huì)發(fā)現(xiàn)它非常有用。說(shuō)沒(méi)用的人,那是他自己根本不懂。
            re: "multiple definition of" 錯(cuò)誤 Kevin Lynx 2008-08-27 08:59
            概念性問(wèn)題而已。

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

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

            不重造輪子,是基于你懂得造輪子的原理基礎(chǔ)上的。而如果你自己都不懂,連重造輪子的能力都沒(méi)有,那基本就比重造輪子的人還差了。
            共6頁(yè): 1 2 3 4 5 6 
            人妻无码久久一区二区三区免费 | 久久免费看黄a级毛片| 精品乱码久久久久久夜夜嗨| 国产日韩久久免费影院| 亚洲欧美成人久久综合中文网| 久久久精品人妻一区二区三区蜜桃| 久久久久久亚洲Av无码精品专口 | 久久久无码精品亚洲日韩蜜臀浪潮| 99久久这里只有精品| 亚洲欧洲中文日韩久久AV乱码| 国产综合久久久久| 久久人人爽人人爽人人片AV高清| …久久精品99久久香蕉国产| 精品久久久一二三区| 天天综合久久久网| 人人狠狠综合久久88成人| 亚洲va久久久久| 久久亚洲国产成人精品无码区| 国产精品久久久久久福利69堂| 久久精品一区二区三区AV| 蜜臀久久99精品久久久久久| 人人狠狠综合久久亚洲88| 一本色综合网久久| 色播久久人人爽人人爽人人片AV | 亚洲精品tv久久久久久久久| 久久精品国产第一区二区| 99精品国产在热久久| 人妻精品久久无码区| 久久人人爽人人人人片av| 久久se精品一区精品二区国产| 国产精品免费福利久久| 久久久久久久久久久久中文字幕 | 久久久精品国产免大香伊| 午夜精品久久久久久影视777| 久久se这里只有精品| 国产精品狼人久久久久影院| 亚洲国产精品人久久| 久久99久久无码毛片一区二区| 国产精品成人99久久久久91gav| 品成人欧美大片久久国产欧美...| 精品久久久久久无码国产|