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

            愛老婆,要比編程多一點(diǎn)...

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

            公告

            沐楓的個(gè)人主頁

            eoool.com生成

            eoool.com生成

            常用鏈接

            留言簿(8)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            積分與排名

            • 積分 - 57113
            • 排名 - 402

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            共2頁: 1 2 
            re: Run time type Information 沐楓 2006-07-04 14:53
            好。
            還不知道dynamic_cast<void*>()能轉(zhuǎn)換成真實(shí)類型的指針。有這個(gè)功能,真太好了。
            等C++0x出來后,就可以用:
            auto pv = dynamic_cast<void*>(...)來獲取真實(shí)類型了。
            感覺上,
            C/C++象是藍(lán)領(lǐng),.NET/Java象是白領(lǐng)
            C/C++象是做苦力,.NET/Java象是Office
            re: 為什么main有多種格式? 沐楓 2006-06-09 09:13
            cdecl調(diào)用規(guī)范是c語言特有的。

            例如有函數(shù): int f(int,...)
            r = f(a1,a2,a3,a4)

            它動(dòng)作如下:
            1. 調(diào)用方,先把參數(shù)按從后面到前面的順序壓棧。
            --> 為什么這么做?為了實(shí)現(xiàn)可變參數(shù)。特別是為main和printf所做的工作。
            .... 如上面的f,在調(diào)用時(shí)按a4,a3,a2,a1順序壓棧。即使參數(shù)無數(shù)個(gè),也不會(huì)影響函數(shù)的實(shí)現(xiàn)。
            2. 調(diào)用方,負(fù)責(zé)清理?xiàng)?臻g
            --> 為什么這么做?因?yàn)榈降讐毫硕嗌賯€(gè)參數(shù)在棧里頭,只有調(diào)用方才知道。
            3. 返回值,一概放到規(guī)定的寄存器中。
            --> 為什么這么做?這樣可以允許不使用返回值,寄存器不占用存儲(chǔ)空間,不用關(guān)心內(nèi)存資源問題。

            小結(jié):使用了cdecl,c語言就可以只關(guān)心函數(shù)名,而不再關(guān)心參數(shù)個(gè)數(shù),參數(shù)類型,函數(shù)的返回值問題。因此,一個(gè)函數(shù)名,僅僅表示了函數(shù)的入口,而c語言中的函數(shù)原型,僅僅是為了讓編譯器生成相應(yīng)的調(diào)用代碼。
            因此,對(duì)于一個(gè)函數(shù)而言,函數(shù)原型,愛怎么定義就怎么定義,編譯器和鏈接器都不會(huì)怪你;后果就是,如果原型定義有問題,運(yùn)行結(jié)果要么是錯(cuò)的,要么程序甚至系統(tǒng)崩潰。

            課后提問:在C中,能否返回結(jié)構(gòu)體呢?
            gmail我還一直在用啊。什么時(shí)候有封過,我怎么不知道?
            re: resource dll 沐楓 2006-05-25 13:42
            這個(gè)模板把內(nèi)容都遮住了。
            另外,對(duì)于樓主的例子,還是不要有返回值的好。因?yàn)檫@容易引起誤用。函數(shù)的用戶常常會(huì)以為SetName返回的是未設(shè)置以前的值,而不是錯(cuò)誤與否。
            其實(shí),C/C++等編程語言之所以難懂,是因?yàn)椋袊颂貏e是有點(diǎn)文化的人,素來喜歡用簡化語。

            就象某年春晚相聲中,將簡化語大做批判,其中“上海吊車廠的人員”簡稱為“上吊的”一樣。

            指針數(shù)組和數(shù)組指針,簡化的象術(shù)語一樣。C/C++本來就沒有那么多的術(shù)語,人為增加術(shù)語,只會(huì)使C/C++更加晦澀難懂。

            直接稱呼全稱,估計(jì)問題就解決了:
            用于存儲(chǔ)指針的數(shù)組、指向數(shù)組的指針
            re: 把代碼移植成UNICODE 沐楓 2006-05-19 09:47
            狂暈。看了半天,來了一句“失敗”!!!
            從目前來看,用異常,在OOP方面已經(jīng)很普遍了。
            它對(duì)于棧展開,對(duì)象自我析構(gòu),和資源管理方面可以做得很好。
            另外,在C++中,應(yīng)使用bool代替BOOL。
            AJAX(Asynchronous JavaScript and XML)的名字已經(jīng)對(duì)這些東西說的很明白了。
            AJAX在技術(shù)方面并非新東西,而是將近幾年的技術(shù)做一個(gè)總結(jié)。
            因此,雖說有炒作,但更多的是,對(duì)用戶體驗(yàn)的重視。
            看了很感動(dòng)。
            眼看著你就畢業(yè)了,我想兩年內(nèi),你們的家就會(huì)因?yàn)槟愕膴^斗而更加的幸福。
            正想說呢,結(jié)果被樓上先說了。:)

            看來M$的宣傳到位啊。這么多難用的方法(最后一個(gè)還算不錯(cuò)),樓主都知道了,就是不知道標(biāo)準(zhǔn)C庫的方法。
            C++并不能帶來更多的效率。主要還是程序(員)本身。
            @萬連文
            低端嵌入式,還是匯編和C。
            中端嵌入式,是C和C++。
            高端的,一般是C/C++,Java,.NET。
            @christanxw
            并非如此。
            傳奇是delphi,許多小游戲是javaApplet和Flash,已經(jīng)有.NET和Java的大型游戲和網(wǎng)絡(luò)游戲。手機(jī)游戲相當(dāng)多是用.NET和Java,一部份用C++。
            另外,C/C++做的游戲也需要腳本。
            越往后,C/C++做游戲的優(yōu)勢(shì)也越小。
            估計(jì)遇到這樣的for語句,在某些大公司是會(huì)被警告直至走人的。
            干嘛非要放到括號(hào)里完成呢?

            另外,字符數(shù)組你這程序是不能用的。
            我給你一個(gè)測(cè)試用例:
            char arr[5] = {'H', 'e', 'l', 'l', 'o'};

            ----------
            BTW,你如果要指定是C++,那么,C++中已經(jīng)有reverse函數(shù)(頭文件algorithm):
            reverse(str, str+strlen(str)-1);
            而交換變量,也有swap函數(shù)(頭文件algorithm):
            swap(*head++, *tail--);
            re: Is it a vc6 bug? 沐楓 2006-04-25 08:58
            這個(gè)語句,無論如何都不能說是編譯器的bug。
            根據(jù)編譯器實(shí)現(xiàn)的不同,可以有不同的結(jié)果。

            特別是優(yōu)化過以后,有可能先執(zhí)行 b=a,再執(zhí)行 (a+b)-b。這是最優(yōu)化的。
            當(dāng)然也可能是先執(zhí)行(a+b),再執(zhí)行 (b=a),再執(zhí)行 (a+b)-b。

            規(guī)則:在同一條語句中不要讓發(fā)生改變的變量出現(xiàn)多次。
            re: 我們?yōu)楹螐牟粎⑴c? 沐楓 2006-04-24 11:29
            和能力無關(guān)。
            一是拿來主義
            二是英文不好
            char* revstr(char* str){
              char* head = str;
              char* tail = head + strlen(head) -1;
              while(head < tail) {
                char c = *head;
                *head++ = *tail;
                *tail-- = c;
              }
              return str;
            }
            代碼風(fēng)格應(yīng)該受到批評(píng)。
            就這么幾行的程序,就讓人看得難以理解--特別是那個(gè)恐怖的for.
            而且就本程序來說,沒必要另外分配一個(gè)內(nèi)存。

            BTW: //Feature: This version is suitable for both sring and array
            這個(gè)更離譜了,string還好說,array如何能用呢?
            參考小文:http://ly4cn.cnblogs.com/archive/2006/04/06/368210.html
            里面的MASM是6.14,不知道vc6帶的是不是這個(gè)版本?(可以dos下打入ml 查看)。
            如果是的話,就可以在嵌入?yún)R編中使用文中的api定義和調(diào)用了。
            這就非常方便。
            你那是C語言。只不過是把malloc用new來替代罷了。
            真正的C語言(C99)是支持動(dòng)態(tài)數(shù)組的,如:

            void func(int N)
            {
            int arr[N][N] = {0};
            ...
            }

            對(duì)于C++來說,則:
            void func(int N)
            {
            vector<vector<int> > arr(N);
            for_each(arr.begin(), arr.end(), bind2nd(mem_fun_ref(&vector<int>::resize), N));
            ...
            }
            int ** arr = new int * [N];
            for (i = 0 ;i < N;i ++ )
            arr[i] = new int [N];
            for (i = 0 ;i < N;i ++ )
            for (j = 0 ;j < N;j ++ )
            arr[i][j] = 0 ;

            好可怕的數(shù)據(jù)結(jié)構(gòu)和初始化!!!
            MS多少年沒有對(duì)mfc的結(jié)構(gòu)做大的變動(dòng)了?再加上現(xiàn)在的重點(diǎn)是放在.NET以及新一代的應(yīng)用程序框架上(這里要罵一句,好象新的框架只能用在vista上),估計(jì)MFC即使升到9.0也仍然是修修補(bǔ)補(bǔ)。沒戲。
            2005也不行。
            因?yàn)闊o論如何都不知道如何給出一個(gè)int的值。
            從這一點(diǎn)來說,gcc不知道會(huì)把damn實(shí)例化成什么,damn<0>嗎?
            "通過使操作系統(tǒng)更安全、更可靠、響應(yīng)更及時(shí),使人們更自信 "
            更安全可靠不去評(píng)論。

            響應(yīng)更及時(shí),估計(jì)要靠硬件來支持,從這一點(diǎn)來說,這不是MS的功勞,而應(yīng)該是錢包的功勞吧。也正因?yàn)槭清X包的功勞,所以人們才更自信。。。
            我沒看到onsize,只看到oncreate,是不是樓主寫錯(cuò)了?
            個(gè)人覺得很難優(yōu)化。因?yàn)槊總€(gè)字節(jié)拷貝,都要留一個(gè)跳轉(zhuǎn)入口。編譯器又怎么敢私自用8字節(jié)操作指令直接優(yōu)化掉它呢。
            由此估計(jì),寫此代碼純粹是為了挑戰(zhàn)C/C++的語法。
            re: C#中重用c/c++舊模塊 沐楓 2006-03-31 17:30
            @Ninputer
            我試過不是這樣的。
            我這幾天曾把手頭上的幾個(gè)C++項(xiàng)目,一字不改,僅將編譯選項(xiàng)改為/clr,就編譯通過了。并且運(yùn)行效果完全正常。
            用reflector反編譯也成功的看到源碼(只是源碼有點(diǎn)不太好看)。
            這幾個(gè)項(xiàng)目有些是MFC項(xiàng)目,有些是API項(xiàng)目,都使用了模板和標(biāo)準(zhǔn)庫,以及第三方的DLL。
            re: C#中重用c/c++舊模塊 沐楓 2006-03-31 13:21
            你這項(xiàng)目要是沒有特殊要求,其實(shí)最簡單的方法是,采用C++/CLI來包裝原有的dll或代碼,然后就可以直接讓C#引用了。
            甚至可以直接用C++/CLI重編譯原有代碼,只增加一個(gè)或若干個(gè)接口類給.net引用。極端一點(diǎn)的,干脆不用C#,只用C++/CLI。
            這樣的做法是,簡單,快捷,并且完美。甚至可以讓代碼同時(shí)擁有本地代碼和托管代碼。從而為反編譯增加最大的難度。
            因?yàn)椴皇撬械慕涌诤蛃truct都能很方便的封裝成C#中去。
            沒什么講究啦,就是看什么詞容易讓人理解,就是什么詞好。
            重載,重寫,和隱藏會(huì)不會(huì)更好理解一些。
            re: 何為仿函數(shù) 沐楓 2006-03-24 17:08
            “呵呵,可以不用那么的麻煩的。 直接調(diào)用就可以了。 你可以試一試。” --@ walkspeed

            --我試了,證明是一定要麻煩點(diǎn),需要多加個(gè)括號(hào)。
              如你自已的代碼中:ObjectFunction2()(10);而不能ObjectFunction2(10)。而函數(shù)就可以。
              不知道你所謂的不用那么麻煩,是如何做到的。

            我不是不懂什么對(duì)象構(gòu)造仿函數(shù)什么的。只是說,仿函數(shù)畢竟不是函數(shù),不能直接調(diào)用,這一點(diǎn)和函數(shù)是有差別的。
            我以前做了一個(gè)doxygen標(biāo)記的小結(jié),希望有幫助。
            http://ly4cn.cnblogs.com/archive/2005/11/23/282637.html
            re: 何為仿函數(shù) 沐楓 2006-03-24 11:06
            d:\test\ttttt\ttttt\ttttt.cpp(25) : error C2440: '<function-style-cast>' : cannot convert from 'int' to 'f'
            No constructor could take the source type, or constructor overload resolution was ambiguous

            -------------------Source-------------
            #include <iostream>
            using namespace std;

            class f{
            public:
            void operator()(int x) {
            cout << x << endl;
            }
            };

            int _tmain(int argc, _TCHAR* argv[]) {
            f(10);//Error 2440
            f()(10);//OK

            system("Pause");
            return 0;
            }
            re: 何為仿函數(shù) 沐楓 2006-03-24 09:03
            仿函數(shù)和函數(shù)畢竟還是不同的。
            比如上面的ObjectFunction2,你在調(diào)用時(shí)應(yīng)該是:

            ObjectFunction2()(10);
            這和函數(shù)

            func(10);
            區(qū)別還是挺大的。

            那vc6的 atlstring 有沒有?我沒裝vc6不好意思。
            @sunny_98

            謝謝指出。我在vc2005下試,成功報(bào)錯(cuò)。改天我在vc7.1下再試試。
            ……這兩個(gè)問題總得是剛從C轉(zhuǎn)到C++的人容易犯的。
            由于習(xí)慣了C的思維,而又不認(rèn)真查閱文檔,想當(dāng)然耳,所犯的錯(cuò)誤。

            特別是第2個(gè)問題,不至于要這么用吧,為什么要繞幾個(gè)彎呢?
            CString str( "123 45" );
            CString resToken;

            int curPos= 0;
            while (curPos != -1)
            {
            resToken= str.Tokenize(" ", curPos);
            cout << (LPCTSTR)resToken << endl;
            };

            用Tokenize,不會(huì)改變?cè)醋执?/div>
            re: 模板套模板~~ 沐楓 2006-03-22 09:08
            typedef一下就不糊涂了。
            錯(cuò)誤不少:
            1. *p-- = *q--; // 嚴(yán)重錯(cuò)誤
            Fix: *q-- = *p--;
            此處是要把插入點(diǎn)之后的字串搬到末尾。末尾的指針是q。
            2. s+i-1 // 計(jì)算錯(cuò)誤
            Fix: s+i
            C/C++字串是從0開始算的,因此,不需要減一。
            3. char* s = "Student"; // !!! 極其嚴(yán)重的錯(cuò)誤
            Fix: char s[100] = "Student";
            作為目的字串,必須預(yù)留足夠的空間,并且不能是const.(字串常量類型是const char*)

            優(yōu)化建議:
            1. strlen
            完全可以避免strlen的調(diào)用。strlen在這里極其浪費(fèi)效率。
             你可以把這個(gè)做為練習(xí),繼續(xù)優(yōu)化。
            2. void Insert(char *s, char *s1, int i)
            原型不好,難以讓人知道哪個(gè)是源哪個(gè)是目的,并且也不安全。最好改為:
            void Insert(char* dst, const char* src, int pos);
            re: 從int 到string的幾種方法 沐楓 2006-03-17 23:04
            一般傾向于itoa,效率不錯(cuò)。
            而且一般不愛用string而是用字符數(shù)組來存放,因?yàn)檎麛?shù)轉(zhuǎn)換的結(jié)果不超過10個(gè)字符,不管從哪方面來說,都合算。
            re: 矩形相含問題 沐楓 2005-11-16 11:08
            受教了
            re: [GDI+]由彩色到黑白 沐楓 2005-11-16 11:05
            能不能加上兩種方法的性能比較。

            一般情況下,ColorMatrix的性能比較差(如果直接改象素的程序?qū)懙暮玫脑挘?
            似乎只要用到ImageAttributes,GDI+性能就大幅下降。很明顯的一點(diǎn)就是:
            帶Alpha的圖片顯示
            就是比
            不帶Alpha而且ColorKey的圖片顯示
            來得快得多!
            在.NET博客注冊(cè)了后,如果要發(fā)表C++的隨筆, 是不是要在這里再注冊(cè)一個(gè)?

            另外,驗(yàn)證碼太簡單了,軟件比較容易識(shí)別。
            最好數(shù)字用不同大小,不同的旋轉(zhuǎn)角度,再加幾條干擾線,再畫出來,這樣就不容易識(shí)別了。
            共2頁: 1 2 
            综合久久国产九一剧情麻豆| 久久se精品一区二区| 久久精品国产福利国产琪琪| 伊人久久大香线焦综合四虎| 国产综合精品久久亚洲| 97精品依人久久久大香线蕉97| 久久久久亚洲AV无码永不| 91精品婷婷国产综合久久| 伊人精品久久久久7777| 久久99国产精品久久99果冻传媒| 日本一区精品久久久久影院| 国内高清久久久久久| 久久国产美女免费观看精品| 色妞色综合久久夜夜| 亚洲AⅤ优女AV综合久久久| 久久国产热精品波多野结衣AV| 久久精品一区二区影院 | 国产精品久久久久久久久鸭| 日本欧美国产精品第一页久久| 久久精品国产亚洲AV麻豆网站| 欧美日韩中文字幕久久久不卡| 97r久久精品国产99国产精| 久久精品国产亚洲AV久| 色综合久久最新中文字幕| 久久天天躁夜夜躁狠狠| 久久狠狠一本精品综合网| 久久久中文字幕| 国产精品久久精品| 潮喷大喷水系列无码久久精品| 国产精品久久久香蕉| 思思久久好好热精品国产| 久久久久久一区国产精品| 色综合色天天久久婷婷基地| 国产精品久久网| 2020久久精品国产免费| 久久精品亚洲一区二区三区浴池| 四虎国产精品成人免费久久| 一级做a爰片久久毛片免费陪| 久久午夜无码鲁丝片秋霞 | 亚洲综合精品香蕉久久网97 | 91久久婷婷国产综合精品青草 |