国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

C++語言常見問題解答(3)

2019-11-17 05:44:08
字體:
供稿:網(wǎng)友

== Part 3/4  ============================ ============================= 
■□ 第14節(jié):程式風(fēng)格指導(dǎo) 
============================= 
 
Q81:有任何好的 C++ 程式寫作的標(biāo)準(zhǔn)嗎? 
 
感謝您閱讀這份文件,而不是再發(fā)明自己的一套。 
 
但是請(qǐng)不要在 comp.lang.c++ 里問這問題。幾乎所有軟體工程師,或多或少都把這 
種東西看成是「大玩具」。而且,一些想成為 C++ 程式撰寫標(biāo)準(zhǔn)的東西,是由那些 
不熟悉這語言及方法論的人弄出來的,所以最後它只能成為「過去式」的標(biāo)準(zhǔn)。這種 
「擺錯(cuò)位置」的現(xiàn)象,讓大家對(duì)程式寫作標(biāo)準(zhǔn)產(chǎn)生不信任感。 
 
很明顯的,在 comp.lang.c++ 問這問題的人,是想使自己更精進(jìn),不會(huì)因自己的無 
知而絆倒,然而一些回答卻只是讓情況更糟而已。 
 
======================================== 
 
Q82:程式撰寫標(biāo)準(zhǔn)是必要的嗎?有它就夠了嗎? 
 
程式撰寫標(biāo)準(zhǔn)不會(huì)讓不懂 OO 的人變懂;只有練習(xí)及經(jīng)驗(yàn)才有可能。假如它有用處的 
話,那就是抑制住那些瑣碎無關(guān)緊要的程式片段--當(dāng)大機(jī)構(gòu)想把零散的程式設(shè)計(jì)組 
織整合起來時(shí),這些片段經(jīng)常會(huì)出現(xiàn)。 
 
但事實(shí)上你要的不光是這種標(biāo)準(zhǔn)而已。它們提供的架構(gòu)讓新手少去擔(dān)心一些自由度, 
但是系統(tǒng)化的方法論會(huì)比這些好看的標(biāo)準(zhǔn)做得更好。組織機(jī)構(gòu)需要的是一致性的設(shè)計(jì) 
與實(shí)行“哲學(xué)”,譬如:強(qiáng)型別或弱型別?用指標(biāo)還是參考介面? stream I/O 還是 
stdio? C++ 程式該不該呼叫 C 的?反過來呢? ABC 該怎麼用?繼續(xù)該用為實(shí)作的 
技巧還是特異化的技巧?該用哪一種測(cè)試策略?一一去檢查嗎?該不該為每個(gè)資料成 
員都提供一致的 "get" 和 "set" 介面?介面該由外往內(nèi)還是由內(nèi)往外設(shè)計(jì)?錯(cuò)誤狀 
況該用 try/catch/throw 還是傳回值來處理?……等等。 
 
我們需要的是具體的“設(shè)計(jì)”部份的「半標(biāo)準(zhǔn)」。我推薦一個(gè)三段式標(biāo)準(zhǔn):練習(xí)、諮 
詢顧問以及程式庫。練習(xí)乃提供「密集教學(xué)」,諮詢顧問讓 OO 觀念深刻化,而非僅 
僅是被教過而已,高品質(zhì)的程式庫則是提供「長程的教學(xué)」。上述三種培訓(xùn)都有很熱 
門的市場(chǎng)景況。(【譯注】無疑的,這是指美、加地區(qū)。)接受過上述培訓(xùn)的組織都 
有如此的忠告:「買現(xiàn)成的吧,不要自己硬干 (Buy, Don't Build.)。」買程式庫, 
買練習(xí)課程,買開發(fā)工具,買諮詢顧問。想靠自學(xué)來達(dá)到成功的工具廠商及應(yīng)用/系 
統(tǒng)廠商,都會(huì)發(fā)現(xiàn)成功很困難。 
 
【譯注】這一段十分具有參考價(jià)值。不過有些背景資料得提供給各位參考。別忘了: 
         作者是美國人,是以該地為背景,且留意一下他所服務(wù)的公司是做什麼的.. 
         ... :-)   唉!國內(nèi)有這麼多的專業(yè)顧問公司嗎? :-< 
 
少數(shù)人會(huì)說:程式撰寫標(biāo)準(zhǔn)只是「理想」而已,但在上述的組織機(jī)構(gòu)中,它仍有其必 
要性。 
 
底下的 FAQs 提供一些基本的指導(dǎo)慣例及風(fēng)格。 
 
======================================== 
 

Q83:我們的組織該以以往 C 的經(jīng)驗(yàn)來決定程式撰寫標(biāo)準(zhǔn)嗎? 
 
No! 
 
不論你的 C 經(jīng)驗(yàn)有多豐富,不論你有多高深的 C 能力,好的 C 程式員并不會(huì)讓你 
直接就成為好的 C++ 程式員。從 C 移到 C++ 并不僅是學(xué)習(xí) "++" 的語法語意而已 
,一個(gè)組織想達(dá)到 OOP 的境界,卻未將 "OO" 的精神放進(jìn) OOP 里的話,只是自欺罷 
了;會(huì)計(jì)的資產(chǎn)負(fù)債表會(huì)把他們的愚蠢顯現(xiàn)出來。 
 
C++ 程式撰寫標(biāo)準(zhǔn)應(yīng)該由 C++ 專家來調(diào)整,不妨先在 comp.lang.c++ 里頭問問題( 
但是不要用 "coding standard" 這種字眼;只要這樣子問:「這種技巧有何優(yōu)缺點(diǎn) 
?」)。找個(gè)能幫你避開陷阱的高手,上個(gè)練習(xí)課程,買程式庫,看看「好的」程式 
庫是否合乎你的程式撰寫標(biāo)準(zhǔn)。絕對(duì)不要光靠自己來制定標(biāo)準(zhǔn),除非你對(duì)它已有某種 
程度的把握。沒有標(biāo)準(zhǔn)總比有爛標(biāo)準(zhǔn)好,因?yàn)椴磺‘?dāng)?shù)摹腹俜秸f法」會(huì)讓不夠聰明的 
平民難以追隨。現(xiàn)在 C++ 練習(xí)課程及程式庫,已有十分興盛的市場(chǎng)。 
 
再提一件事:當(dāng)某個(gè)東西炙手可熱時(shí),招搖撞騙者亦隨之而生;務(wù)必三思而後行。也 
要問一下從某處修過課的人,因?yàn)槔鲜植灰姷靡彩莻€(gè)好教員。最後,選個(gè)懂得指導(dǎo)別 
人的從業(yè)人員,而不是個(gè)對(duì)此語言/方法論只有過時(shí)知識(shí)的全職教師。 
 
【譯注】善哉斯言! 
 
======================================== 
 
Q84:我該在函數(shù)中間或是開頭來宣告區(qū)域變數(shù)? 
 
在第一次用到它的地方四周。 
 
物件在宣告的時(shí)候就會(huì)被初始化(被建構(gòu))。假如在初始化物件的地方?jīng)]有足夠的資 
訊,直到函數(shù)中間才有的話,你可以在開頭處初始個(gè)「空值」給它,等以後再「設(shè)定 
」其值;你也可以在函數(shù)中間再初始個(gè)正確的東西給它。以執(zhí)行效率來說,一開始就 
讓它有正確的值,會(huì)比先建立它,搞一搞它,之後再重建它來得好。以像 "String" 
這種簡單的例子來看,會(huì)有 350% 的速度差距。在你的系統(tǒng)上可能會(huì)不同;當(dāng)然整個(gè) 
系統(tǒng)可能不會(huì)降低到 300+%,但是“一定”會(huì)有不必要的性能衰退現(xiàn)象。 
 
常見的反駁是:「我們會(huì)替物件的每個(gè)資料提供 "set" 運(yùn)作行為,則建構(gòu)時(shí)的額外 
耗費(fèi)就會(huì)分散開來。」這比效能負(fù)荷更糟,因?yàn)槟闾砑恿司S護(hù)的夢(mèng)靨。替每個(gè)資料提 
供 "set" 運(yùn)作行為就等於對(duì)資料不設(shè)防:你把內(nèi)部實(shí)作技巧都顯露出來了。你隱藏 
到的只有成員物件的實(shí)體“名字”而已,但你用到的 List、String 和 float(舉例 
來說)型態(tài)都曝光了。通常維護(hù)會(huì)比 CPU 執(zhí)行時(shí)間耗費(fèi)的資源更多。 
 
區(qū)域變數(shù)應(yīng)該在靠近它第一次用到之處宣告。很抱歉,這和 C 老手的習(xí)慣不同,但 
是「新的」不見得就是「不好的」。 
 
======================================== 
 
Q85:哪一種原始檔命名慣例最好? "foo.C"? "foo.cc"? "foo.cpp"? 
 
假如你已有個(gè)慣例,就用它吧。假如沒有,看看你的編譯器,看它用的是哪一種。典 
型的答案是:".C", ".cc", ".cpp", 或 ".cxx"(很自然的,".C" 副檔名是假設(shè)該 

檔案系統(tǒng)會(huì)區(qū)分出 ".C" ".c

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 桐乡市| 若羌县| 苗栗市| 安义县| 祁门县| 密云县| 澎湖县| 新宾| 越西县| 黄平县| 五原县| 疏附县| 酉阳| 集安市| 咸阳市| 平阳县| 陕西省| 岳普湖县| 吕梁市| 安徽省| 建阳市| 基隆市| 舞钢市| 海淀区| 普格县| 皮山县| 延庆县| 平度市| 怀柔区| 克拉玛依市| 汝阳县| 富锦市| 濮阳市| 霍山县| 承德县| 镇宁| 蓬安县| 白银市| 云林县| 扎囊县| 元朗区|