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

            huaxiazhihuo

             

            非理性擁護C++

                    本來只想對C++贊嘆復贊嘆,后來就失控了,接著情緒化了,最后終于開始爆走,語無倫次。
                    平心而論,C的而且確小巧精致,一切通通透透。老夫真心喜歡用它來編碼,但一旦動用真格了,就立馬葉公好龍,就會懷念C++的種種好處,class、 template、 virtual、 析構函數、甚至異常、const、引用等等,原來,離開了之后,才明白你的種種美妙動人之處,因此,朕已決定,有生之年,假如還在編碼,那么C++,在心目中的,將是無可替代,它的一切,即便缺點,也是那么地令人回味無窮。因為它的一切,將自由貫徹到底,充分尊重用戶的選擇,不輕易剝奪用戶的權利,更不強求用戶用什么樣的方式做設計。所謂自由的世界,獨立的人格,手持C++利器,雖不敢說橫行天下,但起碼能愉快地編碼。只有C++,當一個人獨立使用,如此的耐人尋味,歷久常新。多人一塊開發,簡直是大災難,沒必要的封裝,種種自制的破爛輪子(前幾年,出自本座手中的輪子不計其數,基本上慘不忍睹),錯綜復雜,交叉引用的類關系。這在其他語言中難以出現的怪現象,在C++中,平常得很,再一次證明了C++的博大精深,包羅萬象。不說別的,就說C++中的最負盛名GUI框架MFC,其類層次的設計,糟糕透頂,而BCG的代碼注入,毫無創意,笨拙無比的命名,垃圾般狗屎般的代碼堆積,可怕的內存消耗,令人眼界大開,MFC的資源消耗已經夠厲害,相比之下,居然顯得那么節儉,而用BCG開發界面,居然比C#又或者JAVA做出來的軟件,還不卡,這一切,都證明了C++過人之處。愛死你了,C++。
                      近幾年來看到某些人不知出于何因,對C++橫加指責,說什么論效率不如C,論高級特性又不如其他的動態語言,實在莫明奇妙。說什么C++中的inline、繼承、template破壞了模塊的分離,“用C語言1000行源碼能完成的工作千萬不要用C++重寫!”,實則用C++來寫根本就無須1000行,并且可以精簡那些字數多的代碼行,并且還更加易讀易懂,更加容易維護,效率或許還能更快一點點,得益于內聯。如果還覺得用C++寫1000行代碼沒有C那么漂亮,那只證明閣下沒能力駕馭C++,請不要對C++亂加指責。他們那些所謂的C高手的代碼,到處指針飛舞,又長又臭一再重復的表達式(本該內聯大顯身手),著實讓人難受,當然,不否認他們的精妙設計。
                    縱觀他們對C++非議之例子,無一不暴露出其設計上的缺陷,本該成員函數指針大顯伸手,他們卻用上了虛函數;Template模式的函數(順序依次,調用幾本虛函數),本該做成全局函數,硬是整成員函數;多繼承中的鉆石抽象基類不該有任何東西,他們卻偏要放某些東西,最后沒辦法,在虛繼承中糾結。……所有這一切根本無損于C++,卻只顯現出他們的愚蠢與無知。想展現自己也言行獨立,到頭來卻做出拾人牙蠢之事。其實,他們更應該感謝C++,是C++的包容,才容許了如此丑陋的設計。本座平生最不齒這群宵小,自己毫無主見,風聞名人幾句驚世駭俗之話語,就跟著瞎起哄,國人的毫無道理的盲目跟風,由來已久,也不必細表了。那些所謂的C高手,覺得用C能做出精妙的設計,為何用起C++就不行了,其實他們大可“用C做設計,用C++編碼”,這樣,根本就不會影響他們的偉大杰作構思。
            并且要做到如同C那樣的高效,C++中完全沒有問題,完全可以放下身段,將C++的抽象降低到C那樣的級別,在沒有獨立完整的概念之前,或者是沒有很好的理由,絕不用類來封裝代碼,禁用慎用C++的一切高級特性,好比虛函數、繼承、異常等。任何語言特性都可以寫出垃圾代碼,也容易用得不好,但不可因為這樣,就否定此種特性的價值。特性作用越大,就越微妙,就越容易濫用誤用。即此而觀,C++中,應該以class最為難用,此關一過,必定神清氣爽。
            的確,C中,你可以也必須面對一切細節,在這種惡劣的環境下,手上能用的武器,也只有函數、結構體、數組和宏,程序員的潛能就這樣被迫出來,爆發出來了,做出最合乎本質的設計,而這幾樣簡單武器,互相組合,居然可以用得如此出神入化,其效果鬼斧神工,巧奪天工,直可驚天地,泣鬼神,手法更是精彩繽紛,巧妙絕倫,令人目不接暇,但是,不管如何,始終缺乏管理細節的有效武器。
                   鄙人最驚嘆C++的一強悍之處,對于各種匪夷所思的變態問題,會有更加變態的解決方式,而且還不止一兩種,更可見其靈活多變自由豐富的個性,但眾多迥異特性又能如此和諧的共存,為什么?竊以為C++是強類型的靜態語言,雖然提供多種語言工具以讓碼農愉快輕松地編碼,盡可能地在編譯時期發現更多錯誤,各種微妙的語言特性不過是為了幫助碼農愉快高效地編碼,少出錯,他們可以用這些語言工具整理組織C的各種凌散的表達式。
            因為C中雖然能直面一切細節,卻缺乏管理細節的語言工具。所有C中的細節,幾乎可通過C++的各種豐富特性妥善整理,而效率的損失又甚少,并且,在其強大的靜態系統的分析,能多發現點問題。但是強類型只是工具而已,必須善加利用,但C++的碼農不會受束縛,必要的時候,大可突破。鄙人就曾經實現了一個微型的動態系統,對象之間沒有用層次關系,都是平等的,但之間又能互相組合裝配拆除,達到多繼承的效果,又沒有多繼承的各種問題。雖然語法上別扭點,但習慣了就感覺挺不錯。
                   要看到C++的對C代碼的變態重組,為此,隨便舉例,qsort是代碼上的典范境界,能排序所有的數組,只要提供了元素之間的比較函數,就能快速地排序,實至名歸。但它是弱類型,其正確性全靠程序猿手工輸入,參數出錯了,編譯器也檢查不出來,當然C高猿不大容易出錯。只是,依賴于C++強大類型推導威力,通過template整成以下樣子,既不限制qsort的包容性,又不損失任何一點點效率
            template<typename _Ty>
            inline void Sort(_Ty* pItems, size_t nItemCount, int (__cdecl* funcCompare)(const _Ty&, const _Ty&))
            {
                int (__cdecl * _PtFuncCompare)(const void *, const void *);
                union_cast(_PtFuncCompare, funcCompare);    // 為忽弄編譯器的強類型檢查
                qsort(pItems, nItemCount, sizeof(_Ty), _PtFuncCompare);
            }
             但已經是強類型的了,C++猿用起來就不大容易出錯了,并且元素的比較函數也更加容易編寫,沒必要再用指針了,個人而言,引用比指針好,最起碼少敲一下鍵盤,那行代碼的長度可減少了一個字符。這樣,用起來不是更爽嗎?
                  又好比消息循環,判斷消息類型,一遍又一遍地寫著重復的表達式,好比,msg.message==WM_LBUTTONDOWN,不好玩,干脆class一CMsg,繼承自MSG。好比這樣:
            class CMsg : public MSG
            {
            public:
                bool Is(DWORD nMsg) const{ return message==nMsg; }
            };
                     于是以上的那行判斷語句,就精簡成msg.Is(WM_LBUTTONDOWN),感覺應該好點吧。這兩例的代碼整理手段,對C++來說稀松平常,但C中就做不出來了,大概也只能用宏了,但宏的問題,大家也知道。
                    又有人說,C++高手的修成要經過兩次轉換,從C到C++,然后從C++回復C,實在異想天開,不值一曬,舍棄C++的強大類型檢查,欲與一切細節肉博,吾不見其高明。這不是什么C++高手,充其量也只是C高手,其苦心孤詣在C中模仿C++的面向對象的伎倆,用C++來表達,不過小菜一碟,并且還不失強類型檢查,必要時,只須用聯合體或類型轉換忽悠編譯器。那些回歸C的高猿的C++代碼,其實,不甚精致。所以,大家也不必理會。只須老老實實地做出簡簡單單的設計,然后再用C++組織管理各種細節,大可將代碼寫得漂漂亮亮干干凈凈。
                     要謹記的是,只用那些熟悉有把握的語言特性,對于每一個用到的C++關鍵字,一定要清楚其背后的機制并且由此所帶來的各種副作用。最難用的就是class了,毫無必要的封裝, 比赤裸裸的代碼更加丑陋,請優先選擇非成員函數。封裝的出現,是因為代碼的一再重復出現的需要,而并非想當然地推理演繹。只要是重復代碼,不管是一行表達,連續多行,分散跨行,都可以給予包裝在一起,只需一個函數調用。
                      再次重溫C++的核心設計,盡可能利用靜態強類型,盡可能地在編譯期中找出程序的錯誤,提供多種豐富特性,協助碼農充分地發揮強類型的一切優點,對抗一切細節,對抗一切重復代碼,并且不必付出任何不必要的代價。當然,強類型只是忠實的奴仆,完全不必因為它而遷就你的設計,想要忽悠它,方法多種多樣。 有人說,C++的語言特性太凌散,不系統,好像打補丁似的。但鄙人覺得挺好的,特性分散,各自為政,可隨意自由組合,你討厭某個特性,大可不必理睬,它就靜靜地站在一旁,絲毫不影響你的代碼,這不就是設計的最高境界嗎。
                    好了,終于狠狠地出了口惡氣。在下承認很情緒化,有失高手風范。

            posted on 2012-11-21 12:00 華夏之火 閱讀(2642) 評論(16)  編輯 收藏 引用 所屬分類: c++技術探討

            評論

            # re: 非理性擁護C++ 2012-11-21 13:55 fzy

            我只是不喜歡C++的標準在各種實現上的片面化,和某些問題解決方法的各種實現的差異化。
            其他的C++確實很好。
              回復  更多評論   

            # re: 非理性擁護C++ 2012-11-21 15:54 歲月漫步

            你是高手  回復  更多評論   

            # re: 非理性擁護C++ 2012-11-21 19:39 人貴有自知之明


            可笑可嘆!幾斤幾兩,是人則貴有自知之明!
              回復  更多評論   

            # re: 非理性擁護C++[未登錄] 2012-11-21 20:02 123

            說得好!C++是C的擴充,關鍵在于使用,覺得不好的東西不用就行了  回復  更多評論   

            # re: 非理性擁護C++[未登錄] 2012-11-21 20:04 123

            C++就是程序界中的獨孤九劍  回復  更多評論   

            # re: 非理性擁護C++ 2012-11-21 21:13 marvin

            c++最大問題就是
            不把主要精力解決產業問題,而是自娛自樂玩那些自以為高手的東西

            不象c,解決了產業最底層的問題

            新的語言,象go,都是追求最簡單的東西完成功能  回復  更多評論   

            # re: 非理性擁護C++ 2012-11-21 22:08 華夏之火

            @fzy
            的確,一不小心,c++就會變得很亂,現在到處一片混亂  回復  更多評論   

            # re: 非理性擁護C++ 2012-11-21 22:09 華夏之火

            @123
            謝謝,其實說得不好,很情緒化  回復  更多評論   

            # re: 非理性擁護C++ 2012-11-21 22:17 華夏之火

            @marvin
            C++的語言核心還是很好的,就是整個業界很奇怪,都不知大家都在干什么。感覺應該是語言內部沒有統一的表現,c只要內存二進制兼容就好了,而其他語言,基本上一開始就統一了平臺,沒有那么多鬼鬼怪怪  回復  更多評論   

            # re: 非理性擁護C++ 2012-11-21 22:19 華夏之火

            @人貴有自知之明
            都已經說是非理性了,閣下又何必當真  回復  更多評論   

            # re: 非理性擁護C++[未登錄] 2012-11-22 09:35 春秋十二月

            你的文筆有魯迅之風  回復  更多評論   

            # re: 非理性擁護C++ 2012-11-22 18:14 ooseven

            c++最大的遺憾是沒有在不同平臺上出一個統一的編譯器,而讓微軟、開源賺錢組織(gcc)、apple等一幫商業公司把一些標準為完善的地方給碎片化了。造成了今天c++代碼無法通用的局面。
              回復  更多評論   

            # re: 非理性擁護C++ 2012-11-23 21:01 其實俺不是壞人

            @ooseven
            歷史問題,先有多個C++編譯器,才有C++標準。所以標準才有那么多未定義行為、實現者自定義。C也一樣,各種副作用。  回復  更多評論   

            # re: 非理性擁護C++ 2012-11-23 23:19 華夏之火

            @ooseven
            c++本身也太復雜太自由了,對于同一個問題,總有很多種不同解決方法,并且每一種都有其存在的理由  回復  更多評論   

            # re: 非理性擁護C++ 2012-11-23 23:21 華夏之火

            @其實俺不是壞人
            c的副作用相對來說沒那么變態,只是細節太繁瑣了,缺乏有效的語言工具來組織細節  回復  更多評論   

            # re: 非理性擁護C++[未登錄] 2012-11-26 11:52 123

            @ooseven
            語法層面只要不用一些特偏的東西,沒啥問題.
            和系統相關的東西本來就沒法通過編譯器來統一,只能用庫封裝.
            mac系統不清楚,msvc和linux gcc還是很容易用一套代碼的  回復  更多評論   

            導航

            統計

            常用鏈接

            留言簿(6)

            隨筆分類

            隨筆檔案

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            一本伊大人香蕉久久网手机| 久久精品人成免费| 精品无码人妻久久久久久 | 一本色道久久99一综合| 亚洲精品美女久久久久99| 国产美女亚洲精品久久久综合| 伊人色综合久久天天人手人婷 | 国产ww久久久久久久久久| 精品久久久无码中文字幕天天| 香蕉久久久久久狠狠色| 久久99久久99精品免视看动漫| 久久99精品久久久久久野外| 色婷婷综合久久久久中文一区二区| 99久久精品国产一区二区蜜芽| 伊色综合久久之综合久久| 91精品免费久久久久久久久| 国内精品伊人久久久久妇| 国产成人无码精品久久久免费| 久久久久波多野结衣高潮| 国产免费久久久久久无码| 精品久久久噜噜噜久久久| 久久午夜免费视频| 色播久久人人爽人人爽人人片aV| 久久国产精品99久久久久久老狼| 亚洲综合伊人久久综合| 亚洲伊人久久综合影院| 精品人妻伦九区久久AAA片69| 青青草原精品99久久精品66 | 66精品综合久久久久久久| 久久丫精品国产亚洲av不卡 | 久久精品国产亚洲网站| 久久偷看各类wc女厕嘘嘘| 久久精品免费一区二区| 久久精品免费全国观看国产| 欧美日韩成人精品久久久免费看| 91久久精品国产91性色也| 久久se精品一区二区| 国产成人精品综合久久久| 国产99久久久国产精免费| 日本精品久久久久中文字幕| 婷婷综合久久狠狠色99h|