effective C 9 雜項討論

2021-08-27 15:50:35 字數 1304 閱讀 9016

九、雜項討論

條款52:寫了placement new也要寫placement delete

許多程式設計師習慣性地忽略編譯器警告.他們任務如果是問題真的很嚴重的話,編譯器就應該給乙個錯誤提示資訊而

不是警告資訊.這種想法看起來似乎很合理,但是在c++語言上,我覺得編譯器作者對**即將會爆發的事情應該比你有

更加深入的理解,你說呢?下面我舉的這個例子是多多少少在大部人身上都發生過乙個錯誤:

struct b;

struct d:public b;

我現在的編譯器給出了這樣的警告資訊:warning:d::f()hides virtual b::f()

大部分經驗不足的程式設計師對這個資訊的反映都是一副不以為然的態度,他們認為,d::f遮掩了b::f顯然是發生了名

字遮掩現象,給出這樣的資訊很正常啊!錯,此刻的編譯器是在試圖告訴你宣告於b中的f並未在d中被重新宣告,而是被整

個遮掩了(item 33描述為什麼會遮掩).如果忽略這個警告,幾乎肯定導致錯誤的程式行為,然後是許多的除錯行為,只

為了找出編譯器早就試圖告訴你的事情.

你應該知道,編譯器給出的資訊往往和它們'看起來'的意義十分不同!不管怎麼樣,在你打發某個警告資訊之前,請

確定你了解它試圖說出的精確意義.it is very important.

你也應該知道,警告資訊天生和編譯器相依,不同的編譯器有不同的警告標準.所以草率程式設計後依賴編譯器為你指出

錯誤,是非常不明智的選擇.

請記住:

嚴肅對待編譯器發出的警告資訊.努力在你i的編譯器的最高(最嚴厲)警告級別下爭取'無任何警告'的榮譽。

不要過度依賴編譯器的報警能力,因為不同的編譯器對待事情的態度並不相同,一旦移植到另乙個編譯器上,你原本依賴的警告資訊有可能消失.

條款54:讓自己熟悉包括tr1在內的標準程式庫

請記住:

c++標準程式庫的主要機能是由stl,iostreams,locales組成.幷包含c99標準程式庫.

tr1新增了智慧型指標(例如tr1::shared_ptr)、一般化函式指標(tr1::function)、hash-based容器、正則表

達式(regular expressions)以及另外10個元件的支援.

tr1自身只是乙份規範.為獲得tr1提供的好處,你需要乙份實物.乙個好的實物**是boost.

條款55:讓自己熟悉boost

請記住:

boost是乙個社群,也是乙個**.致力於免費、原始碼開發、同僚複審的c++程式庫開發.boost在c++標準化過程過程中扮演深具影響力的角色.

boost提供許多tr1元件實現品,以及其他許多程式庫.

Effective C 讀書筆記 雜項討論

五十 三 條款53 不要輕忽編譯器的警告 1.嚴肅對待編譯器發出的警告訊息。努力在你的編譯器的最高 最嚴苛 警告級別下爭取 無任何警告 的榮譽 2.不要過度倚賴編譯器的報警能力,因為不同的編譯器對待事情的態度並不相同。一旦移值到另乙個編譯器上,你原本倚賴的警告資訊有可能消失 五十 四 條款54 讓自...

九 雜項討論

編譯器的作者對一些接下來可能發生的錯誤的理解一定勝過我們這些普通程式設計師,如果編譯器發出警告,就表明可能存在某種情況會造成一些錯誤,而這些錯誤你可能都沒想到過。所以我們不要忽略編譯器的警告!class base class derive 這一段編譯後,編譯器會發出警告 warning d f hi...

Effective C 學習筆記 (9)

本人學習c 不精,故重新學習,點滴記錄與大家分享,不足之處還望大牛多多指教 當初面試遇到的面試題,後悔看完了,今天一看覺得當時回答的一塌糊塗。先看 吧。彙編如下 在父類的建構函式中呼叫output虛函式,然後在子類的析構函式中也呼叫該函式,會有社麼結果呢?執行結果如下 貌似有點眼熟,對,跟之前學c ...