高質(zhì)量程序設(shè)計(jì)指南

出版時(shí)間:2007-5  出版社:電子工業(yè)  作者:林銳,韓永泉  頁(yè)數(shù):394  
Tag標(biāo)簽:無(wú)  

前言

  第3版  大約在2005年年初,本書(shū)第2版(和第1版)已經(jīng)售完。至今本書(shū)仍然受到軟件公司和C++程序員的關(guān)注,不斷有讀者詢問(wèn)我從何處可以買(mǎi)到本書(shū)、什么時(shí)候再版。  說(shuō)來(lái)慚愧,我從2002年寫(xiě)完本書(shū)第1版后,再也沒(méi)有接觸過(guò)C++編程,現(xiàn)在對(duì)C++已經(jīng)很陌生了。2004年1月我離開(kāi)上海貝爾,創(chuàng)辦了上海漫索計(jì)算機(jī)科技有限公司,專注于IT企業(yè)的研發(fā)管理整體解決方案(包括軟件產(chǎn)品和咨詢服務(wù))。我自己已經(jīng)從技術(shù)專家轉(zhuǎn)型為企業(yè)管理者,關(guān)注商務(wù)多于軟件技術(shù)。對(duì)于出版本書(shū)第3版,我的確心有余而力不足。幸好第2版的作者韓永泉仍然從事應(yīng)用軟件開(kāi)發(fā),寶刀未老,他全面操辦了第3版,我只是掛名而已。  在撰寫(xiě)第3版的時(shí)候,為了更進(jìn)一步突出本書(shū)一貫強(qiáng)調(diào)的“高質(zhì)量程序設(shè)計(jì)”理念,對(duì)原書(shū)第2版的內(nèi)容做了一些調(diào)整:  首先是對(duì)第2版進(jìn)行了全面的修訂,改正了所有已經(jīng)發(fā)現(xiàn)的錯(cuò)誤,并對(duì)原有部分章節(jié)的內(nèi)容進(jìn)行了補(bǔ)充;  其次,刪除了第2版的第2章和第17章(名字空間和模板)。根據(jù)我們的觀察,除非是開(kāi)發(fā)類庫(kù)等通用程序,第17章的內(nèi)容在現(xiàn)階段對(duì)應(yīng)用軟件開(kāi)發(fā)人員一般不具有實(shí)際指導(dǎo)價(jià)值;  最后,增加了大約10個(gè)小節(jié)的內(nèi)容,分散在各章中。這些增加的內(nèi)容是實(shí)際應(yīng)用軟件開(kāi)發(fā)過(guò)程中經(jīng)常會(huì)用到的技術(shù),可以顯著地提高編程效率,增強(qiáng)軟件的健壯性和可移植性?! 〔徽摫緯?shū)第1版和第2版是好是差,它都被過(guò)度地使用了,產(chǎn)生了令作者始料不及的影響。本書(shū)的試題被國(guó)內(nèi)軟件公司大面積地用于C++程序員招聘考試,結(jié)果事先看過(guò)答案的應(yīng)試者考了高分而被錄取,還真有人向我致謝;也有不少人未看過(guò)答案而考了低分未被錄取,在網(wǎng)上把作者罵一通。本書(shū)的試題和答案早在2002年就公開(kāi)了,不知有多少人看過(guò),我很奇怪怎么到現(xiàn)在還被煞有介事地用于考試?! ”緯?shū)第3版即將出版,我希望讀者正確地使用本書(shū):請(qǐng)您學(xué)習(xí)和應(yīng)用您(或公司)認(rèn)為好的東西,不要把本書(shū)當(dāng)做標(biāo)準(zhǔn)來(lái)看待,不要全部照搬,也不必花費(fèi)很多時(shí)間去爭(zhēng)議本書(shū)是好還是壞?! 〉?版  《高質(zhì)量程序設(shè)計(jì)指南—C++/C語(yǔ)言》第1版上市后,一度成為暢銷書(shū)。網(wǎng)上評(píng)論甚多,褒貶參半。我們分析了讀者的批評(píng)和建議,總結(jié)了本書(shū)第1版的主要不足:  由于第1版原本是企業(yè)的培訓(xùn)教材,初衷是為了幫助程序員提高程序質(zhì)量,假設(shè)讀者已經(jīng)熟悉C++/C語(yǔ)法,所以內(nèi)容薄而精練、前后章節(jié)不連貫,看起來(lái)更像專題講座。出版社的宣傳工作做得很好,本書(shū)吸引了很多C++初學(xué)者和高級(jí)程序員。由于書(shū)中不講解入門(mén)知識(shí),導(dǎo)致很多初學(xué)者看不下去。有一些大學(xué)生聽(tīng)了我的講座后,為表敬意特地買(mǎi)書(shū)讓我簽名,翻閱之后就塞進(jìn)書(shū)架當(dāng)做紀(jì)念品了。對(duì)于那些高級(jí)程序員而言,本書(shū)的大部分內(nèi)容他們?cè)缫呀?jīng)熟悉,好不容易看到幾處精彩的章節(jié),卻翻了幾頁(yè)就沒(méi)有了,真是不過(guò)癮啊?! ∥业难芯繉iL(zhǎng)是軟件工程和企業(yè)研發(fā)管理,而非程序設(shè)計(jì)。在C++/C編程方面自己僅僅是一名老工匠而已,我的確沒(méi)有時(shí)間沒(méi)有能力寫(xiě)出讓初學(xué)者和高級(jí)程序員都喜歡的C++/C書(shū)籍。這本書(shū)炒作得過(guò)火,讓我騎虎難下了。從2002年11月起,我就開(kāi)始物色真正的C++/C高手來(lái)寫(xiě)本書(shū)的第2版。  恰好上海大唐移動(dòng)通信設(shè)備有限公司的韓永泉正在為公司寫(xiě)C++/C培訓(xùn)教材,他也是本書(shū)第1版的讀者。韓永泉提出了很有價(jià)值的建議和批評(píng),并把他寫(xiě)的培訓(xùn)教材發(fā)給我看,真是自投羅網(wǎng)??!  韓永泉是在西安電子科技大學(xué)計(jì)算機(jī)系讀的本科和碩士,內(nèi)功扎實(shí)。我和他碰頭交談了2小時(shí),就把第2版托付給他了。兩個(gè)月后,他把第2版的書(shū)稿交給我審閱。第2版的內(nèi)容比第1版多了一倍,其廣度符合我的設(shè)想,其深度完全出乎我的意料。為了闡述清楚C++/C程序之中的許多“為什么”,本書(shū)給出了大量的“提示、建議、規(guī)則”,并從編譯器實(shí)現(xiàn)的角度論述原理。這種深度非一般教科書(shū)能比,我用了一個(gè)月時(shí)間才審閱并且學(xué)習(xí)完畢,刪除了幾十頁(yè)過(guò)分深?yuàn)W的內(nèi)容(免得讓我自己看昏倒)。我相信第2版可以讓大多數(shù)高級(jí)程序員看過(guò)癮了?! 【W(wǎng)上有一些忌世憤俗者認(rèn)為計(jì)算機(jī)領(lǐng)域的每個(gè)分支都已經(jīng)有了世界名著,不具有世界頂尖水平的中國(guó)人再寫(xiě)類似書(shū)籍都是欺世盜名的行為。這種極度自負(fù)和極度自卑的心態(tài)導(dǎo)致他們專愛(ài)罵國(guó)內(nèi)作者。如果中國(guó)作者的書(shū)籍中的技術(shù)錯(cuò)誤被他們抓住,經(jīng)過(guò)放大、推理、演繹之后基本上就能斷定作者是卑鄙之徒,于是磚頭就拍過(guò)來(lái)了(簡(jiǎn)稱“拍磚”)。拍磚者們遙相呼應(yīng),很快就能拍出江湖豪情,被拍的作者就成了倒霉蛋。有位好心的讀者怕我經(jīng)受不起,特意發(fā)給我一本拍磚大法——《拍磚十二流》以增強(qiáng)內(nèi)功?! 【W(wǎng)上自由漫罵既是網(wǎng)絡(luò)價(jià)值的體現(xiàn)又是民主的體現(xiàn),這是物質(zhì)文明和精神文明發(fā)展到一定境界的產(chǎn)物。《高質(zhì)量程序設(shè)計(jì)指南——C++/C語(yǔ)言》第2版即將出版,作者忐忑不安地等待第二輪“拍磚”?! 〉?版  軟件質(zhì)量是被許多程序員掛在嘴上而不是放在心上的東西!  除了完全外行和真正的編程高手外,初讀本書(shū),你最先的感受將是驚慌:“哇!我以前捏造的C++/C程序怎么會(huì)有那么多的毛???”  別難過(guò),作者只不過(guò)比你早幾年、多幾次驚慌而已?! ≌?qǐng)花幾小時(shí)認(rèn)真閱讀這本經(jīng)書(shū),你將會(huì)獲益匪淺,這是前面N-1個(gè)讀者的建議?! 【幊汤鲜峙c高手的誤區(qū)  自從計(jì)算機(jī)問(wèn)世以來(lái),程序設(shè)計(jì)就成了令人羨慕的職業(yè),程序員在受人寵愛(ài)之后容易發(fā)展成為毛病特多卻常能自我臭美的群體。  如今在Internet上流傳的“真正”的程序員據(jù)說(shuō)是這樣的: ?。?)真正的程序員沒(méi)有進(jìn)度表,只有討好領(lǐng)導(dǎo)的馬屁精才有進(jìn)度表,真正的程序員會(huì)讓領(lǐng)導(dǎo)提心吊膽?! 。?)真正的程序員不寫(xiě)使用說(shuō)明書(shū),用戶應(yīng)當(dāng)自己去猜想程序的功能?! 。?)真正的程序員幾乎不寫(xiě)代碼的注釋,如果注釋很難寫(xiě),它理所當(dāng)然也很難讀。 ?。?)真正的程序員不畫(huà)流程圖,原始人和文盲才會(huì)干這事?! 。?)真正的程序員不看參考手冊(cè),新手和膽小鬼才會(huì)看?! 。?)真正的程序員不寫(xiě)文檔也不需要文檔,只有看不懂程序的笨蛋才用文檔?! 。?)真正的程序員認(rèn)為自己比用戶更明白用戶需要什么?! 。?)真正的程序員不接受團(tuán)隊(duì)開(kāi)發(fā)的理念,除非他自己是頭頭?! 。?)真正的程序員的程序不會(huì)第一次就正確運(yùn)行,但是他們?cè)敢馐刂鴻C(jī)器進(jìn)行若干個(gè)30小時(shí)的調(diào)試改錯(cuò)?! 。?0)真正的程序員不會(huì)在上午9:00到下午5:00之間工作,如果你看到他在上午9:00工作,這表明他從昨晚一直干到現(xiàn)在?!   【邆渖鲜鎏卣髟蕉?,越顯示程序員水平高,資格老。所以別奇怪,程序員的很多缺點(diǎn)竟然可以被當(dāng)做優(yōu)點(diǎn)來(lái)欣賞。就像在武俠小說(shuō)中,那些獨(dú)來(lái)獨(dú)往、不受約束且?guī)c(diǎn)邪氣的高手最令人崇拜一樣。我曾經(jīng)也這樣信奉,并且希望自己成為那樣的“真正”的程序員,結(jié)果沒(méi)有得到好下場(chǎng)?! ∥覐淖x大學(xué)到博士畢業(yè)10年來(lái)一直勤奮好學(xué),累計(jì)編寫(xiě)了數(shù)十萬(wàn)行C++/C代碼。有這樣的苦勞和疲勞,我應(yīng)該稱得上是編程老手了吧?  我開(kāi)發(fā)的軟件都與科研相關(guān)(集成電路CAD和3D圖形學(xué)領(lǐng)域),動(dòng)輒數(shù)萬(wàn)行程序,技術(shù)復(fù)雜,難度頗高。這些軟件頻頻獲獎(jiǎng),有一個(gè)軟件獲得首屆中國(guó)大學(xué)生電腦大賽軟件展示一等獎(jiǎng)。在1995年開(kāi)發(fā)的一套圖形軟件庫(kù)到2000年還有人買(mǎi)。羅列出這些“業(yè)績(jī)”,可以說(shuō)明我算得上是編程高手了吧?  可惜這種個(gè)人感覺(jué)不等于事實(shí)?!   ∽x博期間我曾用一年時(shí)間開(kāi)發(fā)了一個(gè)近10萬(wàn)行C++代碼的3D圖形軟件產(chǎn)品,我內(nèi)心得意表面謙虛地向一位真正的軟件高手請(qǐng)教。他雖然從未涉足過(guò)3D圖形領(lǐng)域,卻在幾十分鐘內(nèi)指出該軟件多處重大設(shè)計(jì)錯(cuò)誤。讓人感覺(jué)那套軟件是用紙糊的華麗衣服,扯一下掉一塊,戳一下破個(gè)洞。我目瞪口呆地意識(shí)到這套軟件毫無(wú)實(shí)用價(jià)值,一年的心血白花了,并且害死了自己的軟件公司?! ∪说念D悟通常發(fā)生在最心痛的時(shí)刻,在沮喪和心痛之后,我作了深刻反省,“面壁”半年,重新溫習(xí)軟件設(shè)計(jì)的基礎(chǔ)知識(shí)。補(bǔ)修“內(nèi)功”之后,又覺(jué)得腰板硬了起來(lái)。博士畢業(yè)前半年,我曾到微軟中國(guó)研究院找工作,接受微軟公司一位資深軟件工程師的面試。他讓我寫(xiě)函數(shù)strcpy的代碼?! √菀琢税??  錯(cuò)!  這么一個(gè)小不點(diǎn)兒的函數(shù),他從三個(gè)方面考查:  (1)編程風(fēng)格; ?。?)出錯(cuò)處理;  (3)算法復(fù)雜度分析(用于提高性能)?! ≡诖髮W(xué)里從來(lái)沒(méi)有人如此嚴(yán)格地考查過(guò)我的程序。我花了半小時(shí),修改了數(shù)次,他還不盡滿意,讓我回家好好琢磨。我精神抖擻地進(jìn)“考場(chǎng)”,大汗淋漓地出“考場(chǎng)”。這“高手”當(dāng)?shù)靡蔡C囊了。我又好好地反省了一次。  我把反省后的心得體會(huì)寫(xiě)成文章放在網(wǎng)上,引起了不少軟件開(kāi)發(fā)人員的共鳴。我因此有幸和國(guó)內(nèi)大型IT企業(yè)如華為、上海貝爾、中興等公司的同行們廣泛交流。大家認(rèn)為提高質(zhì)量與生產(chǎn)率是軟件工程要解決的核心問(wèn)題。高質(zhì)量程序設(shè)計(jì)是非常重要的環(huán)節(jié),畢竟軟件是靠編程來(lái)實(shí)現(xiàn)的?! ∥覀冃哪恐械睦鲜謧兒透呤謧兡芊窬帉?xiě)出高質(zhì)量的程序來(lái)?  不見(jiàn)得都能!  就我的經(jīng)歷與閱歷來(lái)看,國(guó)內(nèi)大學(xué)的計(jì)算機(jī)教育根本就沒(méi)有灌輸高質(zhì)量程序設(shè)計(jì)的觀念,教師們和學(xué)生們也很少自覺(jué)關(guān)心軟件的質(zhì)量。勤奮好學(xué)的程序員長(zhǎng)期在低質(zhì)量的程序堆中滾爬,吃盡苦頭之后才有一些心得體會(huì),長(zhǎng)進(jìn)極慢,我就是一例?! ‖F(xiàn)在國(guó)內(nèi)IT企業(yè)擁有學(xué)士、碩士、博士文憑的軟件開(kāi)發(fā)人員比比皆是,但他們?cè)诮邮艽髮W(xué)教育時(shí)就“先天不足”,豈能一到企業(yè)就突然實(shí)現(xiàn)質(zhì)的飛躍。試問(wèn)有多少軟件開(kāi)發(fā)人員對(duì)正確性、健壯性、可靠性、性能、易用性、清晰性、可擴(kuò)展性、安全性、兼容性、可移植性等質(zhì)量屬性了如指掌?并且能在實(shí)踐中運(yùn)用自如?“高質(zhì)量”可不是干活小心點(diǎn)就能實(shí)現(xiàn)的!  我們有充分的理由疑慮:  (1)編程老手可能會(huì)長(zhǎng)期用隱含錯(cuò)誤的方式編程,習(xí)慣成自然后,被人指出發(fā)現(xiàn)毛病時(shí)都不愿相信那是真的!  (2)編程高手可以在某一領(lǐng)域?qū)懗鰳O有水平的代碼,但未必能從全局把握軟件質(zhì)量的方方面面?! ∈聦?shí)證明如此。我到上海貝爾工作后,陸續(xù)面試或測(cè)試過(guò)近百名“新”、“老”程序員的編程技能,合格率低于50%。很少有人能夠?qū)懗鐾耆腺|(zhì)量要求的if語(yǔ)句,很多程  序員對(duì)指針、內(nèi)存管理一知半解……  領(lǐng)導(dǎo)們不敢相信這是真的。我做過(guò)現(xiàn)場(chǎng)試驗(yàn):有一次部門(mén)新進(jìn)14名碩士生,在開(kāi)歡迎會(huì)之前對(duì)他們進(jìn)行“C++/C編程技能”摸底考試。我問(wèn)大家試題難不難?所有的人都回答不難。結(jié)果沒(méi)有一個(gè)人及格,有半數(shù)人得零分?! 「?jìng)爭(zhēng)對(duì)手如華為、中興、大唐等公司的朋友們也做過(guò)試驗(yàn),也是類似的結(jié)果。真的不是我“心狠手辣”或者要求過(guò)高(甚至變態(tài)),而是很多軟件開(kāi)發(fā)人員對(duì)自己的要求不夠高。要知道這些大公司的員工素質(zhì)在國(guó)內(nèi)IT企業(yè)中是比較位列前茅前列的,倘若他們的編程質(zhì)量都如此差的話,我們?cè)趺锤移谕行」灸贸龈哔|(zhì)量的軟件呢?連程序都編不好,還談什么振興民族軟件產(chǎn)業(yè)?! 《嗄陙?lái),我在軟件開(kāi)發(fā)過(guò)程中的苦頭吃得實(shí)在太多了,現(xiàn)在總算被折磨清醒了。我打算定義編程老手和編程高手,請(qǐng)您別見(jiàn)笑?! 《x1:能長(zhǎng)期穩(wěn)定地編寫(xiě)出高質(zhì)量程序的程序員稱為編程老手?! 《x2:能長(zhǎng)期穩(wěn)定地編寫(xiě)出高難度、高質(zhì)量程序的程序員稱為編程高手?! 「鶕?jù)上述定義,馬上得到第一推論:我既不是高手也算不上是老手。  在寫(xiě)此書(shū)前,我閱讀了不少程序設(shè)計(jì)方面的英文著作,越看越羞慚。因?yàn)榘l(fā)現(xiàn)自己在編程基本技能方面都未能全面掌握,頂多算是二流水平,還好意思談什么老手和高手。希望和我一樣在國(guó)內(nèi)土生土長(zhǎng)的程序員朋友們能夠做到: ?。?)知錯(cuò)就改;  (2)經(jīng)常溫故而知新; ?。?)堅(jiān)持學(xué)習(xí),天天向上?!   ×咒J  2002年4月  上海貝爾阿爾卡特股份有限公司

內(nèi)容概要

  高質(zhì)量程序設(shè)計(jì)是軟件行業(yè)的薄弱環(huán)節(jié),大部分企業(yè)只能大量的測(cè)試和改錯(cuò)來(lái)提高軟件產(chǎn)品的質(zhì)量,為此付出了高昂的代價(jià)。因此,如何讓程序員熟練地掌握編程技術(shù)和編程規(guī)范,在開(kāi)發(fā)過(guò)程中內(nèi)建高質(zhì)量代碼,是IT企業(yè)面臨的主要挑戰(zhàn)之一?! ”緯?shū)以輕松幽默的筆調(diào)向讀者論述了高質(zhì)量軟件開(kāi)發(fā)方法與C++/C編程規(guī)范。它是作者多年從事軟件開(kāi)發(fā)工作的經(jīng)驗(yàn)總結(jié)。本書(shū)共17章,第1章到第4章重點(diǎn)介紹軟件質(zhì)量和基本的程序設(shè)計(jì)方法;第5章到第16章重點(diǎn)闡述C++/C編程風(fēng)格、面向?qū)ο蟪绦蛟O(shè)計(jì)方法和一些技術(shù)專題;第17章闡述STL的原理和使用方法?! ”緯?shū)第1版和第2版部分章節(jié)曾經(jīng)在Imemet上廣泛流傳,被國(guó)內(nèi)IT企業(yè)的不少軟件開(kāi)發(fā)人員采  用本書(shū)的附錄C《大學(xué)十年》是作者在網(wǎng)上發(fā)表的一個(gè)短篇傳記,文中所描述的充滿激情的學(xué)習(xí)和生活態(tài)度,感染了大批莘莘學(xué)子?! ”緯?shū)的主要讀者對(duì)象是IT企業(yè)的程序員和項(xiàng)目經(jīng)理,以及大專院校的本科生和研究生。

作者簡(jiǎn)介

  林銳,1973年生。1990年至1996年,就讀于西安電子科技大學(xué),獲碩士學(xué)位。 1997年至2000年,就讀于浙江大學(xué)計(jì)算機(jī)系,獲博士學(xué)位。大學(xué)期間兩度被評(píng)為中國(guó)百名跨世紀(jì)優(yōu)秀大學(xué)生,1996年獲電子工業(yè)部科技進(jìn)步二等獎(jiǎng),1997年獲首屆中國(guó)大學(xué)生電腦大賽軟件展示一等獎(jiǎng)。2000年7月加入上海貝爾有限公司,從事軟件工程和CMM的研究推廣工作,2003年7月當(dāng)選為Alcatel集團(tuán)軟件工程專家。2004年初創(chuàng)建上海漫索計(jì)算機(jī)科技有限公司(http://www.chinaspis.com),致力于創(chuàng)作適合國(guó)內(nèi)企業(yè)需求的軟件研發(fā)管理解決方案,包括方法論和軟件產(chǎn)品。工作期間出版著作六部。

書(shū)籍目錄

第1章 高質(zhì)量軟件開(kāi)發(fā)之道	11.1 軟件質(zhì)量基本概念	11.1.1 如何理解軟件的質(zhì)量	11.1.2 提高軟件質(zhì)量的基本方法	31.1.3 “零缺陷”理念	41.2 細(xì)說(shuō)軟件質(zhì)量屬性	41.2.1 正確性	41.2.2 健壯性	51.2.3 可靠性	51.2.4 性能	61.2.5 易用性	71.2.6 清晰性	71.2.7 安全性	71.2.8 可擴(kuò)展性	81.2.9 兼容性	81.2.10 可移植性	81.3 人們關(guān)注的不僅僅是質(zhì)量	91.3.1 質(zhì)量、生產(chǎn)率和成本之間的關(guān)系	91.3.2 軟件過(guò)程改進(jìn)的基本概念	111.4 高質(zhì)量軟件開(kāi)發(fā)的基本方法	131.4.1 建立軟件過(guò)程規(guī)范	131.4.2 復(fù)用	151.4.3 分而治之	161.4.4 優(yōu)化與折中	171.4.5 技術(shù)評(píng)審	181.4.6 測(cè)試	191.4.7 質(zhì)量保證	211.4.8 改錯(cuò)	221.5 關(guān)于軟件開(kāi)發(fā)的一些常識(shí)和思考	241.5.1 有最好的編程語(yǔ)言嗎	241.5.2 編程是一門(mén)藝術(shù)嗎	241.5.3 編程時(shí)應(yīng)該多使用技巧嗎	241.5.4 換更快的計(jì)算機(jī)還是換更快的算法	251.5.5 錯(cuò)誤是否應(yīng)該分等級(jí)	251.5.6 一些錯(cuò)誤的觀念	251.6 小結(jié)	26第2章 編程語(yǔ)言發(fā)展簡(jiǎn)史	272.1 編程語(yǔ)言大事記	272.2 Ada的故事	302.3 C/C++發(fā)展簡(jiǎn)史	312.4 Borland與Microsoft之爭(zhēng)	322.5 Java陣營(yíng)與Microsoft的較量	332.6 小結(jié)	36第3章 程序的基本概念	373.1 程序設(shè)計(jì)語(yǔ)言	373.2 語(yǔ)言實(shí)現(xiàn)	383.3 程序庫(kù)	403.4 開(kāi)發(fā)環(huán)境	403.5 程序的工作原理	413.6 良好的編程習(xí)慣	42第4章 C++/C程序設(shè)計(jì)入門(mén)	454.1 C++/C程序的基本概念	454.1.1 啟動(dòng)函數(shù)main()	454.1.2 命令行參數(shù)	474.1.3 內(nèi)部名稱	484.1.4 連接規(guī)范	494.1.5 變量及其初始化	514.1.6 C Runtime Library	524.1.7 編譯時(shí)和運(yùn)行時(shí)的不同	524.1.8 編譯單元和獨(dú)立編譯技術(shù)	544.2 基本數(shù)據(jù)類型和內(nèi)存映像	544.3 類型轉(zhuǎn)換	564.3.1 隱式轉(zhuǎn)換	564.3.2 強(qiáng)制轉(zhuǎn)換	584.4 標(biāo)識(shí)符	604.5 轉(zhuǎn)義序列	614.6 運(yùn)算符	624.7 表達(dá)式	634.8 基本控制結(jié)構(gòu)	654.9 選擇(判斷)結(jié)構(gòu)	654.9.1 布爾變量與零值比較	664.9.2 整型變量與零值比較	674.9.3 浮點(diǎn)變量與零值比較	674.9.4 指針變量與零值比較	694.9.5 對(duì)if語(yǔ)句的補(bǔ)充說(shuō)明	704.9.6 switch結(jié)構(gòu)	704.10  循環(huán)(重復(fù))結(jié)構(gòu)	714.10.1 for語(yǔ)句的循環(huán)控制變量	724.10.2 循環(huán)語(yǔ)句的效率	734.11 結(jié)構(gòu)化程序設(shè)計(jì)原理	784.12 goto/continue/break語(yǔ)句	794.13 示例	80第5章 C++/C常量	855.1 認(rèn)識(shí)常量	855.1.1 字面常量	855.1.2 符號(hào)常量	865.1.3 契約性常量	875.1.4 枚舉常量	875.2 正確定義符號(hào)常量	875.3 const與#define的比較	885.4 類中的常量	895.5 實(shí)際應(yīng)用中如何定義常量	90第6章 C++/C函數(shù)設(shè)計(jì)基礎(chǔ)	956.1 認(rèn)識(shí)函數(shù)	956.2 函數(shù)原型和定義	966.3 函數(shù)調(diào)用方式	976.4 認(rèn)識(shí)函數(shù)堆棧	996.5 函數(shù)調(diào)用規(guī)范	1006.6 函數(shù)連接規(guī)范	1016.7 參數(shù)傳遞規(guī)則	1026.8 返回值的規(guī)則	1046.9 函數(shù)內(nèi)部實(shí)現(xiàn)的規(guī)則	1076.10 存儲(chǔ)類型及作用域規(guī)則	1096.10.1 存儲(chǔ)類型	1096.10.2 作用域規(guī)則	1106.10.3 連接類型	1116.11 遞歸函數(shù)	1136.12 使用斷言	1166.13 使用const提高函數(shù)的健壯性	1186.13.1 用const修飾函數(shù)的參數(shù)	1186.13.2 用const修飾函數(shù)的返回值	119第7章 C++/C指針、數(shù)組和字符串	1217.1 指針	1217.1.1 指針的本質(zhì)	1217.1.2 指針的類型及其支持的運(yùn)算	1237.1.3 指針傳遞	1257.2 數(shù)組	1267.2.1 數(shù)組的本質(zhì)	1267.2.2 二維數(shù)組	1287.2.3 數(shù)組傳遞	1297.2.4 動(dòng)態(tài)創(chuàng)建、初始化和刪除數(shù)組的方法	1317.3 字符數(shù)組、字符指針和字符串	1337.3.1 字符數(shù)組、字符串和\0的關(guān)系	1337.3.2 字符指針的誤區(qū)	1347.3.3 字符串拷貝和比較	1347.4 函數(shù)指針	1357.5 引用和指針的比較	137第8章 C++/C高級(jí)數(shù)據(jù)類型	1418.1 結(jié)構(gòu)(Struct)	1418.1.1 關(guān)鍵字struct與class的困惑	1418.1.2 使用struct	1428.1.3 位域	1458.1.4 成員對(duì)齊	1478.2 聯(lián)合(Union)	1598.3 枚舉(Enum)	1618.4 文件	163第9章 C++/C編譯預(yù)處理	1659.1 文件包含	1659.1.1 內(nèi)部包含衛(wèi)哨和外部包含衛(wèi)哨	1659.1.2 頭文件包含的合理順序	1669.2 宏定義	1669.3 條件編譯	1699.3.1 #if、#elif和#else	1699.3.2 #ifdef 和 #ifndef	1709.4 #error	1719.5 #pragma	1719.6 #和##運(yùn)算符	1719.7 預(yù)定義符號(hào)常量	172第10章 C++/C文件結(jié)構(gòu)和程序版式	17510.1 程序文件的目錄結(jié)構(gòu)	17510.2 文件的結(jié)構(gòu)	17610.2.1 頭文件的用途和結(jié)構(gòu)	17610.2.2 版權(quán)和版本信息	17710.2.3 源文件結(jié)構(gòu)	17810.3 代碼的版式	17810.3.1 適當(dāng)?shù)目招?17810.3.2 代碼行及行內(nèi)空格	17910.3.3 長(zhǎng)行拆分	18010.3.4 對(duì)齊與縮進(jìn)	18110.3.5 修飾符的位置	18210.3.6 注釋風(fēng)格	18210.3.7 ADT/UDT版式	183第11章 C++/C應(yīng)用程序命名規(guī)則	18511.1 共性規(guī)則	18511.2 簡(jiǎn)單的Windows應(yīng)用程序命名	186第12章 C++面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述	18912.1 漫談面向?qū)ο?18912.2 對(duì)象的概念	19012.3 信息隱藏與類的封裝	19112.4 類的繼承特性	19512.5 類的組合特性	20012.6 動(dòng)態(tài)特性	20112.6.1 虛函數(shù)	20212.6.2 抽象基類	20212.6.3 動(dòng)態(tài)綁定	20512.6.4 運(yùn)行時(shí)多態(tài)	20712.6.5 多態(tài)數(shù)組	20812.7 C++對(duì)象模型	21512.7.1 對(duì)象的內(nèi)存映像	21512.7.2 隱含成員	22412.7.3 C++編譯器如何處理成員函數(shù)	22512.7.4 C++編譯器如何處理靜態(tài)成員	22512.8 小結(jié)	226第13章 對(duì)象的初始化、拷貝和析構(gòu)	22913.1 構(gòu)造函數(shù)與析構(gòu)函數(shù)的起源	22913.2 為什么需要構(gòu)造函數(shù)和析構(gòu)函數(shù)	23013.3 構(gòu)造函數(shù)的成員初始化列表	23213.4 對(duì)象的構(gòu)造和析構(gòu)次序	23413.5 構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用時(shí)機(jī)	23513.6 構(gòu)造函數(shù)和賦值函數(shù)的重載	23613.7 示例:類String的構(gòu)造函數(shù)和析構(gòu)函數(shù)	23813.8 何時(shí)應(yīng)該定義拷貝構(gòu)造函數(shù)和拷貝賦值函數(shù)	23913.9 示例:類String的拷貝構(gòu)造函數(shù)和拷貝賦值函數(shù)	24013.10 用偷懶的辦法處理拷貝構(gòu)造函數(shù)和拷貝賦值函數(shù)	24213.11 如何實(shí)現(xiàn)派生類的基本函數(shù)	243第14章 C++函數(shù)的高級(jí)特性	24714.1 函數(shù)重載的概念	24714.1.1 重載的起源	24714.1.2 重載是如何實(shí)現(xiàn)的	24714.1.3 當(dāng)心隱式類型轉(zhuǎn)換導(dǎo)致重載函數(shù)產(chǎn)生二義性	24914.2 成員函數(shù)的重載、覆蓋與隱藏	25014.2.1 重載與覆蓋	25014.2.2 令人迷惑的隱藏規(guī)則	25114.2.3 擺脫隱藏	25314.3 參數(shù)的默認(rèn)值	25414.4 運(yùn)算符重載	25514.4.1 基本概念	25514.4.2 運(yùn)算符重載的特殊性	25614.4.3 不能重載的運(yùn)算符	25714.4.4 重載++和——	25714.5 函數(shù)內(nèi)聯(lián)	25914.5.1 用函數(shù)內(nèi)聯(lián)取代宏	25914.5.2 內(nèi)聯(lián)函數(shù)的編程風(fēng)格	26014.5.3 慎用內(nèi)聯(lián)	26114.6 類型轉(zhuǎn)換函數(shù)	26114.7 const成員函數(shù)	264第15章 C++異常處理和RTTI	26715.1 為什么要使用異常處理	26715.2 C++異常處理	26815.2.1 異常處理的原理	26815.2.2 異常類型和異常對(duì)象	26915.2.3 異常處理的語(yǔ)法結(jié)構(gòu)	27015.2.4 異常的類型匹配規(guī)則	27215.2.5 異常說(shuō)明及其沖突	27215.2.6 當(dāng)異常拋出時(shí)局部對(duì)象如何釋放	27315.2.7 對(duì)象構(gòu)造和析構(gòu)期間的異常	27315.2.8 如何使用好異常處理技術(shù)	27515.2.9 C++的標(biāo)準(zhǔn)異常	27815.3 虛函數(shù)面臨的難題	27815.4 RTTI及其構(gòu)成	28015.4.1 起源	28015.4.2 typeid運(yùn)算符	28115.4.3 dynamic_cast運(yùn)算符	28315.4.4 RTTI的魅力與代價(jià)	285第16章 內(nèi)存管理	28716.1 內(nèi)存分配方式	28716.2 常見(jiàn)的內(nèi)存錯(cuò)誤及其對(duì)策	28816.3 指針參數(shù)是如何傳遞內(nèi)存的	28916.4 free和delete把指針怎么啦	29116.5 動(dòng)態(tài)內(nèi)存會(huì)被自動(dòng)釋放嗎	29216.6 杜絕“野指針”	29216.7 有了malloc/free為什么還要new/delete	29316.8 malloc/free的使用要點(diǎn)	29516.9 new有3種使用方式	29616.9.1 plain new/delete	29616.9.2 nothrow new/delete	29716.9.3 placement new/delete	29716.10 new/delete的使用要點(diǎn)	30016.11 內(nèi)存耗盡怎么辦	30116.12 用對(duì)象模擬指針	30216.13 泛型指針auto_ptr	30516.14 帶有引用計(jì)數(shù)的智能指針	30616.15 智能指針作為容器元素	310第17章 學(xué)習(xí)和使用STL	32317.1 STL簡(jiǎn)介	32317.2 STL頭文件的分布	32417.2.1 容器類	32417.2.2 泛型算法	32517.2.3 迭代器	32517.2.4 數(shù)學(xué)運(yùn)算庫(kù)	32517.2.5 通用工具	32517.2.6 其他頭文件	32617.3 容器設(shè)計(jì)原理	32617.3.1 內(nèi)存映像	32617.3.2 存儲(chǔ)方式和訪問(wèn)方式	32717.3.3 順序容器和關(guān)聯(lián)式容器的比較	32817.3.4 如何遍歷容器	33117.3.5 存儲(chǔ)空間重分配問(wèn)題	33217.3.6 什么樣的對(duì)象才能作為STL容器的元素	33317.4 迭代器	33417.4.1 迭代器的本質(zhì)	33417.4.2 迭代器失效及其危險(xiǎn)性	33817.5 存儲(chǔ)分配器	34617.6 適配器	34717.7 泛型算法	35017.8 一些特殊的容器	35417.8.1 string類	35417.8.2 bitset并非set	35517.8.3 節(jié)省存儲(chǔ)空間的vector	35717.8.4 空容器	35817.9 STL容器特征總結(jié)	36017.10 STL使用心得	362附錄A C++/C試題	365附錄B C++/C試題答案與評(píng)分標(biāo)準(zhǔn)	369附錄C 大學(xué)十年	375附錄D 《大學(xué)十年》后記	393附錄E 術(shù)語(yǔ)與縮寫(xiě)解釋	395參考文獻(xiàn)	397

圖書(shū)封面

圖書(shū)標(biāo)簽Tags

無(wú)

評(píng)論、評(píng)分、閱讀與下載


    高質(zhì)量程序設(shè)計(jì)指南 PDF格式下載


用戶評(píng)論 (總計(jì)20條)

 
 

  •   書(shū)買(mǎi)來(lái)了一直沒(méi)怎么看,慚愧啊
  •   好書(shū)啊!好多東西是其他書(shū)上沒(méi)有的!
  •   性價(jià)比,給力
  •   高質(zhì)量程序設(shè)計(jì)指南
  •   看到網(wǎng)上說(shuō)的比較好,就買(mǎi)了
  •   很基礎(chǔ)很透徹
  •   別人代買(mǎi)的 還不錯(cuò)···
  •     林銳博士在寫(xiě)這本書(shū)的時(shí)候畢竟很早了,所以書(shū)中出現(xiàn)了很多錯(cuò)誤。
      
      第1章 文件結(jié)構(gòu)
      
      每個(gè)C++/C程序通常分為兩個(gè)文件。
      
      //錯(cuò)誤。沒(méi)有強(qiáng)調(diào)翻譯單元的概念。
      
      另一個(gè)文件用于保存程序的實(shí)現(xiàn)(implementation),稱為定義(definition)文件。
      
      //有誤。實(shí)現(xiàn)不簡(jiǎn)單等同于定義。例如,類的完整聲明也是類的定義,但不是完整的實(shí)現(xiàn)。頭文件也可以存放其它定義(例如模板和內(nèi)聯(lián)函數(shù)的實(shí)現(xiàn))。
      
      
      1.2
      建議1-2-1
      
      在C++語(yǔ)法中,類的成員函數(shù)可以在聲明的同時(shí)被定義,并且自動(dòng)成為內(nèi)聯(lián)函數(shù)。這雖然會(huì)帶來(lái)書(shū)寫(xiě)上的方便,但卻造成了風(fēng)格不一致,弊大于利。建議將成員函數(shù)的定義與聲明分開(kāi),不論該函數(shù)體有多么小。
      
      //這條建議一般不適用于類模板。
      
      
      1.4
      
      頭文件能加強(qiáng)類型安全檢查。如果某個(gè)接口被實(shí)現(xiàn)或被使用時(shí),其方式與頭文件中的聲明不一致,編譯器就會(huì)指出錯(cuò)誤,這一簡(jiǎn)單的規(guī)則能大大減輕程序員調(diào)試、改錯(cuò)的負(fù)擔(dān)。
      
      //在使用合理的情況下,這基本上是正確的,但頭文件可以導(dǎo)致其它方面——像重構(gòu)(典型情況如重命名一個(gè)函數(shù))的復(fù)雜化。
      
      
      第2章 程序的版式
      這章基本是主觀內(nèi)容。讀者需要注意風(fēng)格是有爭(zhēng)議的,其中的“良好風(fēng)格”或“不良風(fēng)格”并非公認(rèn)。
      
      2.8
      很多C++教課書(shū)受到Biarne Stroustrup第一本著作的影響,不知不覺(jué)地采用了“以數(shù)據(jù)為中心”的書(shū)寫(xiě)方式,并不見(jiàn)得有多少道理。
      
      我建議讀者采用“以行為為中心”的書(shū)寫(xiě)方式,即首先考慮類應(yīng)該提供什么樣的函數(shù)。這是很多人的經(jīng)驗(yàn)——“這樣做不僅讓自己在設(shè)計(jì)類時(shí)思路清晰,而且方便別人閱讀。因?yàn)橛脩糇铌P(guān)心的是接口,誰(shuí)愿意先看到一堆私有數(shù)據(jù)成員!”
      
      //“ Biarne Stroustrup ”拼寫(xiě)錯(cuò)誤。C++之父的名字是 Bjarne Stroustrup 。有些一廂情愿了: C++ 的類定義中既然允許顯式地表示 private 成員,就不是純粹的接口描述方式。以我個(gè)人的經(jīng)驗(yàn),數(shù)據(jù)成員寫(xiě)在后面可能會(huì)導(dǎo)致順序閱讀代碼時(shí)需要回溯。當(dāng)類定義長(zhǎng)度較小時(shí)這點(diǎn)影響不大,但定義長(zhǎng)度比較長(zhǎng)的時(shí)候(例如Loki::Functor里的代碼)就會(huì)需要較頻繁地滾屏,影響代碼閱讀效率。
      
      
      第3章 命名規(guī)則
      這章也基本是主觀內(nèi)容。
      
      3.1
      規(guī)則3-1-1
      
      標(biāo)識(shí)符應(yīng)當(dāng)直觀且可以拼讀,可望文知意,不必進(jìn)行“解碼”。
      
      //這點(diǎn)和此文建議使用的匈牙利命名法有一定程度的矛盾。
      
      
      規(guī)則3-1-3
      
      命名規(guī)則盡量與所采用的操作系統(tǒng)或開(kāi)發(fā)工具的風(fēng)格保持一致。
      
      //盡管大部分人應(yīng)該樂(lè)于支持這個(gè)觀點(diǎn),不過(guò)事實(shí)上有時(shí)候無(wú)法實(shí)現(xiàn)。例如同時(shí)使用標(biāo)準(zhǔn)庫(kù)和Windows API 風(fēng)格的代碼。這時(shí)倒不妨直接約定允許根據(jù)上下文選擇要使用的命名風(fēng)格。要點(diǎn)是,應(yīng)該讓人看出某個(gè)名稱是用哪個(gè)風(fēng)格命名的,而不至于一眼就混淆來(lái)源。
      
      
      3.2
      規(guī)則3-2-7
      
      為了防止某一軟件庫(kù)中的一些標(biāo)識(shí)符和其它軟件庫(kù)中的沖突,可以為各種標(biāo)識(shí)符加上能反映軟件性質(zhì)的前綴。例如三維圖形標(biāo)準(zhǔn)OpenGL的所有庫(kù)函數(shù)均以gl開(kāi)頭,所有常量(或宏定義)均以GL開(kāi)頭。
      
      //在 C++ 中應(yīng)該考慮是否可以用命名空間代替前綴。
      
      
      第4章 表達(dá)式和基本語(yǔ)句
      
      我真的發(fā)覺(jué)很多程序員用隱含錯(cuò)誤的方式寫(xiě)表達(dá)式和基本語(yǔ)句,我自己也犯過(guò)類似的錯(cuò)誤。
      
      //作者似乎沒(méi)搞清楚“錯(cuò)誤”一詞的語(yǔ)義。
      
      
      4.3
      規(guī)則4-3-4
      不要寫(xiě)成
       if (p== 0) // 容易讓人誤解p是整型變量
       if (p!= 0)
      
      //事實(shí)上,C++中的NULL典型地就是 int 字面量 0 (考慮到成文時(shí)間,不提新標(biāo)準(zhǔn)的空指針類型),和 int 兼容。以 Bjarne Stroustrup 的觀點(diǎn),這樣恰恰會(huì)使人誤以為 NULL 不是整數(shù),因此推薦用 0 而不是 NULL 。
      
      
      4.3.5
      
      或者改寫(xiě)成更加簡(jiǎn)練的return (condition ? x : y);
      
      //這里的括號(hào)是多余的。
      
      
      4.4
      這節(jié)不是語(yǔ)言本身而是涉及語(yǔ)言實(shí)現(xiàn)的內(nèi)容。以現(xiàn)在的觀點(diǎn)來(lái)看,優(yōu)化器會(huì)可能會(huì)在此做一些工作。當(dāng)然了解一些相關(guān)原理大體上還是有益的。
      
      第5章 常量
      
      常量是一種標(biāo)識(shí)符,它的值在運(yùn)行期間恒定不變。C語(yǔ)言用 #define來(lái)定義常量(稱為宏常量)。C++ 語(yǔ)言除了 #define外還可以用const來(lái)定義常量(稱為const常量)。
      
      //譚XX風(fēng)格的信口開(kāi)河。這段引文中逗號(hào)或者句號(hào)之間的內(nèi)容,沒(méi)一個(gè)能算得上是正確的。
      
      
      5.2
      規(guī)則5-2-1
      
      在C++程序中只使用 const常量而不使用宏常量,即const常量完全取代宏常量。
      
      //這是有問(wèn)題的。事實(shí)上很多情況下 const 只能讓編譯器被修飾的對(duì)象當(dāng)做只讀變量,而非編譯期的真正意義的常量進(jìn)行處理。與 #define 的符號(hào)常量(字面量)相比,只讀變量受到了一些限制,例如不能作 case 的標(biāo)號(hào)。
      
      
      第6章 函數(shù)設(shè)計(jì)
      
       C語(yǔ)言中,函數(shù)的參數(shù)和返回值的傳遞方式有兩種:值傳遞(pass by value)和指針傳遞(pass by pointer)。
      
      //錯(cuò)誤。形式上, C 語(yǔ)言函數(shù)參數(shù)只按值傳遞。所謂的指針傳遞是按值傳遞的一種,只是傳遞參數(shù)的類型是指針而已。
      
      
      6.1
      規(guī)則6-1-1
      
      參數(shù)的書(shū)寫(xiě)要完整,不要貪圖省事只寫(xiě)參數(shù)的類型而省略參數(shù)名字。如果函數(shù)沒(méi)有參數(shù),則用void填充。
      
      //不妥當(dāng)。有時(shí)候參數(shù)的名稱并非有意義,像 int max(int, int); 之類的原型,寫(xiě)了也不會(huì)讓函數(shù)的意義更清楚。此外,并沒(méi)有指出C函數(shù)沒(méi)有參數(shù)時(shí)參數(shù)列表為 void ,這和省略參數(shù)列表(接受任意參數(shù))是不同的。而 C++ 中省略參數(shù)列表和 void 參數(shù)相同,參數(shù)列表 ... 接受不確定個(gè)數(shù)的參數(shù)。
      
      
      6.2
      規(guī)則6-2-3
      
      不要將正常值和錯(cuò)誤標(biāo)志混在一起返回。正常值用輸出參數(shù)獲得,而錯(cuò)誤標(biāo)志用return語(yǔ)句返回。
      
      //在C++中可以不使用此規(guī)則而使用異常(在 C 中理論上也可以類似地使用 setjmp/longjmp ,但容易造成語(yǔ)義不明確,實(shí)際上基本不用)。
      
      
      6.3
      規(guī)則6-3-1
      
      在函數(shù)體的“入口處”,對(duì)參數(shù)的有效性進(jìn)行檢查。
      
      //在函數(shù)接口語(yǔ)義明確的情況下并非是必需的。例如 C 標(biāo)準(zhǔn)庫(kù) <string.h> 中以及 POSIX 標(biāo)準(zhǔn)中的許多函數(shù)。
      
      規(guī)則6-3-2
      
      在函數(shù)體的“出口處”,對(duì)return語(yǔ)句的正確性和效率進(jìn)行檢查。
      
      //同樣不是必需的。此外檢查可能損失效率。
      
      //這里是誤讀。但原文關(guān)于“臨時(shí)變量”的說(shuō)法有誤。
      
      要搞清楚返回的究竟是“值”、“指針”還是“引用”。
      
      //注意返回對(duì)象的語(yǔ)義,但是刻意區(qū)分“值”和“指針”是不必要的,嚴(yán)格上是錯(cuò)誤的——它們根本就不是可以比較的一類概念。
      
      建議6-4-2
      
      函數(shù)體的規(guī)模要小,盡量控制在50行代碼之內(nèi)。
      
      //盡管為數(shù)不多,有些特殊情況,如編譯器的某些分析程序,是明顯的反例。
      
      
      第7章 內(nèi)存管理
      “640Kought to be enough for everybody
      
      —Bill Gates 1981”
      
      //和本章主題無(wú)關(guān)。
      
      
      7.1
      
      內(nèi)存分配方式有三種
      
      //有誤。內(nèi)存分配具體方式由實(shí)現(xiàn)決定,語(yǔ)言只限制存儲(chǔ)類。
      
      
       7.2
      漏了重復(fù)釋放內(nèi)存的錯(cuò)誤(這通常會(huì)引起程序崩潰)。
      規(guī)則7-2-1
      
      用malloc或new申請(qǐng)內(nèi)存之后,應(yīng)該立即檢查指針值是否為NULL。防止使用指針值為NULL的內(nèi)存。
      
      //對(duì) C++ 而言是錯(cuò)誤的。 ISO C++ 關(guān)于內(nèi)存分配失敗的默認(rèn)行為是拋出 std::bad_alloc 異常。如果要使分配失敗不拋出異常,使用 nothrow 版本,或者設(shè)置實(shí)現(xiàn)相關(guān)的編譯選項(xiàng)。
      
      規(guī)則7-2-5
      
      用free或delete釋放了內(nèi)存之后,立即將指針設(shè)置為NULL,防止產(chǎn)生“野指針”。
      
      //不一定必要。例如指針是自動(dòng)變量,在退出所在的塊作用域被自動(dòng)釋放時(shí)。
      
      
      7.3.1
      
      該語(yǔ)句企圖修改常量字符串的內(nèi)容而導(dǎo)致運(yùn)行錯(cuò)誤
      
      //有誤。 C 語(yǔ)言中字符串字面量(具有數(shù)組類型)未必是常量。當(dāng)然還是應(yīng)該避免修改字符串字面量,這是未定義行為。
      
      
      7.9
      
      為new和malloc設(shè)置異常處理函數(shù)。例如VisualC++可以用_set_new_hander函數(shù)為new設(shè)置用戶自己定義的異常處理函數(shù),也可以讓malloc享用與new相同的異常處理函數(shù)。
      
      //應(yīng)該補(bǔ)充的是,標(biāo)準(zhǔn)庫(kù)有 std::set_new_handler 。
      
      
      第8章C++函數(shù)的高級(jí)特性
      
      const與virtual機(jī)制僅用于類的成員函數(shù)。
      
      //應(yīng)該強(qiáng)調(diào)“非靜態(tài)”成員函數(shù),否則就是錯(cuò)誤的。
      
      
     ?。m然似乎沒(méi)有更多明顯的錯(cuò)誤,不過(guò)遺漏的地方一堆,堅(jiān)決不吐槽……= =)
      
      第9章 類的構(gòu)造函數(shù)、析構(gòu)函數(shù)與賦值函數(shù)
      9.1
      
      Stroustrup的命名方法既簡(jiǎn)單又合理:讓構(gòu)造函數(shù)、析構(gòu)函數(shù)與類同名,由于析構(gòu)函數(shù)的目的與構(gòu)造函數(shù)的相反,就加前綴‘~’以示區(qū)別。
      
      //錯(cuò)誤。構(gòu)造函數(shù)和析構(gòu)函數(shù)是無(wú)名的(這個(gè)細(xì)節(jié)決定了一些語(yǔ)言特性的限制,例如不能 using 聲明基類的構(gòu)造函數(shù)),看起來(lái)名稱和類名相同的調(diào)用方式其實(shí)是語(yǔ)法的限制。
      
      非內(nèi)部數(shù)據(jù)類型的成員對(duì)象應(yīng)當(dāng)采用第一種方式初始化,以獲取更高的效率。
      
      //效率在這里倒是次要的(很容易被編譯器優(yōu)化掉),重要的是語(yǔ)義。另外,初始化列表的一些行為是受到特殊限制的,例如基類子對(duì)象和成員的初始化順序和異常。
      
      9.7
      
      (仍然不想吐槽漏掉swap&copy這樣高效可靠的方法而在operator=實(shí)現(xiàn)里分配內(nèi)存……)
      
      
      第10章 類的繼承與組合
      首先標(biāo)題有點(diǎn)問(wèn)題。類可以繼承,組合的應(yīng)該是類的實(shí)例而非本身。
      
      如果將對(duì)象比作房子,那么類就是房子的設(shè)計(jì)圖紙。所以面向?qū)ο笤O(shè)計(jì)的重點(diǎn)是類的設(shè)計(jì),而不是對(duì)象的設(shè)計(jì)。
      
      //因果關(guān)系不成立。而且觀點(diǎn)是有問(wèn)題的,僅適于經(jīng)典的 class-based OOD 。
      
      
      10.2
      規(guī)則10-2-1
      
      若在邏輯上A是B的“一部分”(a partof),則不允許B從A派生,而是要用A和其它東西組合出B。
      
      //錯(cuò)誤。盡管一般組合能夠勝任這項(xiàng)工作,但并非絕對(duì)。可以使用private繼承完成相同的任務(wù),并且提供覆蓋成員函數(shù)的特性。這是組合無(wú)法完成的。
      
      
      第11章 其它編程經(jīng)驗(yàn)
      11.1.3
      
      如果在編寫(xiě)const成員函數(shù)時(shí),不慎修改了數(shù)據(jù)成員,或者調(diào)用了其它非const成員函數(shù),編譯器將指出錯(cuò)誤
      
      //錯(cuò)誤漏了 mutable 修飾的成員這個(gè)特例。
      
      建議11-3-8
      
      避免編寫(xiě)技巧性很高代碼。
      
      //不應(yīng)該逃避。技巧性高不意味著難以理解;即使難以理解,也可以通過(guò)注釋彌補(bǔ)。當(dāng)然,前提是技巧要使用得合理。
      
      建議11-3-13
      
      把編譯器的選擇項(xiàng)設(shè)置為最嚴(yán)格狀態(tài)。
      
      //有時(shí)候現(xiàn)實(shí)不允許,例如考慮已有代碼的兼容性,需要配置時(shí)會(huì)帶來(lái)額外的復(fù)雜性。
      
      
      附錄C :C++/C試題的答案與評(píng)分標(biāo)準(zhǔn)
      標(biāo)準(zhǔn)答案示例:
      const float EPSINON = 0.00001;
      
      if ((x >= - EPSINON) && (x <= EPSINON)
      
      //如果是“標(biāo)準(zhǔn)”的,為什么不用標(biāo)準(zhǔn)庫(kù)的 <float.h>/<cfloat> 的FLT_EPSILON而自己重復(fù)發(fā)明輪子?
      
      
      三、簡(jiǎn)答題(25分)
      
      1、頭文件中的ifndef/define/endif 干什么用?(5分)
      
      答:防止該頭文件被重復(fù)引用。
      
      //錯(cuò)誤。條件編譯顯然不只用于給頭文件增加 header guard 。
      
      
      四、有關(guān)內(nèi)存的思考題(每小題5分,共20分)
      答:程序崩潰。
      因?yàn)镚etMemory并不能傳遞動(dòng)態(tài)內(nèi)存,
      Test函數(shù)中的 str一直都是 NULL。
      
      strcpy(str, "hello world");將使程序崩潰。
      
      //錯(cuò)誤。未定義行為不等同于程序崩潰,盡管很可能是這樣。
      
      
      六、編寫(xiě)類String的構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值函數(shù)(25分)
      
      String& String::operate =(const String &other)
      
      //關(guān)鍵字operator拼寫(xiě)錯(cuò)誤。實(shí)現(xiàn)冗余就不說(shuō)了。
      
      EOF
  •     我很喜歡第一版,也就是100多頁(yè)的那一份。
      
      我是帶著膜拜看完的第三版,也是一種忍受。下面說(shuō)下評(píng)論。
      
      第一章:
       我覺(jué)得說(shuō)了很多廢話,像這些輔助的章節(jié),不深不淺的東西,沒(méi)必要花30頁(yè)去說(shuō),既啰嗦又讓人看不懂,其實(shí)有個(gè)幾頁(yè)就可以講完了嘛,要看的話人家會(huì)去找一下軟件工程的專著。
      
      第二章:
       還蠻有趣。
      第三章:
       覺(jué)得還不錯(cuò)。因?yàn)楹芏嘈率滞植磺迨裁词鞘裁矗裁词钦Z(yǔ)言什么是庫(kù),程序是如何跑起來(lái)的等等,還有把VC++就當(dāng)成C++的,新手我也差不多是這樣。
      
      第四章以及其后:
       我覺(jué)得太基礎(chǔ)的語(yǔ)法等東西講得太多了,簡(jiǎn)直就是啰嗦,而且像他這樣說(shuō)的話,新手看不懂,老手覺(jué)得拖沓~!我覺(jué)得一點(diǎn)意義都沒(méi)有,講講這講講那~完全就是來(lái)湊字?jǐn)?shù)~!?。。。。。?br />   反正之后的章節(jié),除了第一版的內(nèi)容以外,其他的都是雞肋,食之無(wú)味,棄之嘛,它打印在書(shū)上了又搽不掉~(yú)!?。?!
      
      不好,完全不推薦,我只推薦第一版那100多頁(yè)的那個(gè)版本就可以了~~~~~~
  •     寫(xiě)得不錯(cuò)的一本書(shū),但是后面的一些面向?qū)ο蟮谋容^深一些的地方因?yàn)樽约核接邢薏荒芎芎玫捏w會(huì)。
      還會(huì)看第二遍、第n遍的。 后記中《大學(xué)十年》,給了我很大的鼓勵(lì)。讓我覺(jué)得,牛逼是來(lái)自與苦逼,沒(méi)有奮斗,沒(méi)有癡狂的喜歡,走不到高峰。加油,共勉。
  •     整本書(shū)是比較實(shí)用的,編寫(xiě)出來(lái)的代碼也會(huì)非常漂亮。
      但問(wèn)題是,這種代碼編寫(xiě)的規(guī)范不該由coder來(lái)執(zhí)行,而應(yīng)該是一個(gè)自動(dòng)的代碼規(guī)范器來(lái)完成。
      C++本來(lái)就是很惡心的語(yǔ)言,如果coder每天沒(méi)日沒(méi)夜的按照林博士說(shuō)的來(lái)打空格和{},不知會(huì)降低多少工作效率。
      
      但總體來(lái)說(shuō),這本書(shū)仍然是五顆星。因?yàn)樗_實(shí)有用。
  •     和《C語(yǔ)言深度剖析》一樣,這是國(guó)內(nèi)難得的一本好書(shū)。主要是介紹如何寫(xiě)出高質(zhì)量C/C++程序。所謂的高質(zhì)量,主要是指代碼可讀性好,軟件易維護(hù)。書(shū)中提出的一些建議讓我受益匪淺。如果你覺(jué)得自己的代碼寫(xiě)得很爛,那么快去讀讀這本書(shū)吧。
  •     國(guó)人所寫(xiě)的C++技術(shù)書(shū)籍大多很坑爹!難得這本是個(gè)例外,值得一讀,尤其是對(duì)計(jì)算機(jī)系畢業(yè)生而言。這本書(shū)出自經(jīng)驗(yàn)豐富的一線軟件工程師之手,比某些大學(xué)里閉門(mén)造車(chē)的教授們東拼西湊的教程強(qiáng)太多了!
      
      本書(shū)也就定位在初、中級(jí)C/C++技術(shù)水平。你不可能通過(guò)本書(shū)學(xué)會(huì)C++,也不能讀過(guò)此書(shū)就精通了C++,這本書(shū)只是眾多C++技術(shù)書(shū)籍中值得你閱讀的一本。
      
      真有不少公司就是用該書(shū)后面的C/C++測(cè)試題做筆試題,雖然這對(duì)沒(méi)讀過(guò)這本書(shū)的同學(xué)有些不公平。不過(guò)如果真理解了那些測(cè)試題,對(duì)C++初學(xué)者的幫助也是很明顯的。
      
      雖然這本書(shū)的缺點(diǎn)也有不少,比如說(shuō)文風(fēng)不夠簡(jiǎn)練,某些章節(jié)內(nèi)容冗長(zhǎng)拖沓,但瑕不掩瑜這本書(shū)仍然是我所讀過(guò)的、國(guó)人所寫(xiě)對(duì)C++初學(xué)者最有幫助的書(shū)籍。
  •     西電前輩寫(xiě)的,是一本有特色的國(guó)產(chǎn)技術(shù)書(shū),比現(xiàn)在市面上好多互相抄來(lái)抄去的書(shū)要好出很多。在傳統(tǒng)C++語(yǔ)法書(shū)之外,這本書(shū)可以輔助我們對(duì)一些內(nèi)容進(jìn)行再次的深刻認(rèn)識(shí)。書(shū)里面有一些編程規(guī)范的東西,對(duì)于寫(xiě)程序的人來(lái)說(shuō),還是不錯(cuò)的,可以培養(yǎng)好的編碼習(xí)慣。最后附了林銳的自傳——《我的大學(xué)十年》,文筆不錯(cuò)。
  •     適合已經(jīng)看了C++ primer,effective C++之類,并且有較強(qiáng)糾錯(cuò)和猜測(cè)能力的人來(lái)看。。。如果是把這本書(shū)拿來(lái)做準(zhǔn)備找工的筆試面試還是不錯(cuò)的,最好能結(jié)合一下其它的資料。
      最后的后記寫(xiě)的很精彩,佩服這種精力旺盛的人
  •     這是一本曾經(jīng)被很多人奉為經(jīng)典的書(shū),據(jù)說(shuō)不少公司曾經(jīng)直接作為招聘的筆試題。我在高中的時(shí)候看過(guò)第一版,也幫助我養(yǎng)成了不少受用至今的好習(xí)慣,然后稀里糊涂地考上了西電技術(shù)物理學(xué)院,做了林銳的學(xué)弟。
      
      我是在考上西電計(jì)算機(jī)院之后買(mǎi)了這本書(shū)的第三版,也就是我成為韓永泉的學(xué)弟的時(shí)候……看我們老師上課時(shí)候給的示例代碼里還似乎能看出來(lái)這本書(shū)的一點(diǎn)點(diǎn)影響,甚至老師上課舉得第一個(gè)例子就是GetMemory。但是現(xiàn)在看來(lái)這本書(shū)雖然加入了一些關(guān)于OO和STL的東西但是大部分內(nèi)容還是照搬第一版,沒(méi)有任何變化。而書(shū)中林博士的語(yǔ)言風(fēng)格實(shí)在讓我非常頭大,我實(shí)在是……忍著惡心讀完的很多部分。
      
      如果這本書(shū)能夠真的用心去認(rèn)真雕琢,完全可以接近Effective系列的水平,但是顯然作者做的還遠(yuǎn)不夠
  •     不錯(cuò),我找到了電子版,是完整的。
      
      http://www.5ifreedom.com/viewthread.php?tid=508&extra=page%3D1
      
      可以感受到書(shū)的確是不錯(cuò)的。
      
      同意他的觀點(diǎn)
  •     難得的技術(shù)方面的簡(jiǎn)體中文好書(shū),看的我那叫一個(gè)那啥......
      
      在學(xué)校里廣聞林銳師兄的光輝事跡,并影響了班里的一群哥們兒,大四一年里專業(yè)課N多不過(guò),成群結(jié)隊(duì)拿著林銳的《大學(xué)十年》跑去找輔導(dǎo)員想辦法,雖然我一次也沒(méi)這么干過(guò),因?yàn)槲疑钪稽c(diǎn):他是輔導(dǎo)員又不是副導(dǎo)演?!不過(guò)還真是有舉事成功的哥們,引無(wú)數(shù)哥們競(jìng)挨罵并夭折......
      
      反正,沒(méi)事玩兒?jiǎn)h。
  •     很適合剛走上工作崗位的人,和那些不注意編程習(xí)慣的人。提的東西比較廣、很重要,可惜講的不太深,看完這本書(shū)以后建議找更多的讀物來(lái)深入理解。
      
      比較有趣的是,有些公司招聘可能會(huì)用到里面的內(nèi)容……
      
      每個(gè)軟件公司都應(yīng)當(dāng)有自己的編碼規(guī)范,遵照?qǐng)?zhí)行即可,用不著爭(zhēng)論和本書(shū)的細(xì)微區(qū)別。
      
      關(guān)于C語(yǔ)言的嵌入式編程還可以參考MISRA的工業(yè)標(biāo)準(zhǔn)編程規(guī)范。
  •   感覺(jué)語(yǔ)言風(fēng)格讓我讀的很費(fèi)力且沒(méi)勁
 

250萬(wàn)本中文圖書(shū)簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書(shū)網(wǎng) 手機(jī)版

京ICP備13047387號(hào)-7