C++覆轍錄pdf

圖書網
圖書網
圖書網
10905
文章
1660
評論
2020年10月5日15:17:02 評論 16

C++覆轍錄 作者:(美)STEPHEN C. DEWHURST

C++覆轍錄 出版社:人民郵電出版社

C++覆轍錄 內容簡介

《C++覆轍錄》是C++大師Stephen C. Dewhurst根據多年教授C++課程中所遇到的常見錯誤的心得筆記編寫而成。本書所有章節都從一個眾所周知的、在日常編碼或設計實踐經常遭遇的問題入手,先指出其不足,再對其背后思想中存在的合理與不合理之處深入剖析,取其精華,去其糟粕,給出一個簡潔、通用的方案,給出如何規避或糾正它們的建議,從而有助于C++軟件工程師避免重蹈前輩的覆轍。

《C++覆轍錄》適合具有一定C++編程經驗的讀者閱讀。

C++覆轍錄 目錄

前言

致謝

第1章 基礎問題

常見錯誤1:過分積極的注釋

常見錯誤2:幻數

常見錯誤3:全局變量

旧版尊龙人生就是博下载常見錯誤4:未能區分函數重載和形參默認值

常見錯誤5:對引用的認識誤區

常見錯誤6:對常量(性)的認識誤區

常見錯誤7:無視基礎語言的精妙之處

旧版尊龙人生就是博下载常見錯誤8:未能區分可訪問性和可見性

常見錯誤9:使用糟糕的語言

常見錯誤10:無視(久經考驗的)習慣用法

常見錯誤11:聰明反被聰明誤

旧版尊龙人生就是博下载常見錯誤12:嘴上無毛,辦事不牢

第2章 語法問題

旧版尊龙人生就是博下载常見錯誤13:數組定義和值初始化的語法形式混淆

常見錯誤14:捉摸不定的評估求值次序

常見錯誤15:(運算符)優先級問題

常見錯誤16:for語句引發的理解障礙

常見錯誤17:取大優先解析原則帶來的問題

旧版尊龙人生就是博下载常見錯誤18:聲明飾詞次序的小聰明

常見錯誤19:“函數還是對象”的多義性

常見錯誤20:效果漂移的型別量化飾詞

常見錯誤21:自反初始化

常見錯誤22:靜態連接型別和外部連接型別

常見錯誤23:運算符函數名字查找的反常行為

常見錯誤24:晦澀難懂的operator ->

第3章 預處理器問題

常見錯誤25:使用#define定義的字面量

旧版尊龙人生就是博下载常見錯誤26:使用#define定義的偽函數(函數宏)

旧版尊龙人生就是博下载常見錯誤27:#if的濫用

常見錯誤28:斷言(assert宏)的副作用

第4章 型別轉換問題

常見錯誤29:以void *為型別轉換的中介型別

常見錯誤30:截切問題

常見錯誤31:對目標型別為指涉物為常量的指針型別的型別轉換的認識誤區

常見錯誤32:對以指涉物為指涉到常量的指針型別的型別為目標型別的型別轉換的認識誤區

旧版尊龙人生就是博下载常見錯誤33:對以指涉物為指涉到基類型別的指針型別的型別為目標型別的型別轉換的認識誤區

旧版尊龙人生就是博下载常見錯誤34:指涉到多維數組的指針帶來的問題

常見錯誤35:未經校驗的向下轉型

常見錯誤36:型別轉換運算符的誤用

常見錯誤37:始料未及的構造函數型別轉換

旧版尊龙人生就是博下载常見錯誤38:在多繼承條件下進行強制型別轉換

常見錯誤39:對非完整型別做強制型別轉換

常見錯誤40:舊式強制型別轉換

旧版尊龙人生就是博下载常見錯誤41:靜態強制型別轉換

常見錯誤42:形參引發臨時對象生成的初始化

常見錯誤43:臨時對象的生存時域

旧版尊龙人生就是博下载常見錯誤44:引用和臨時對象

常見錯誤45:動態強制型別轉換運算符dynamic_cast帶來的多義性解析失敗

常見錯誤46:對逆變性的誤解

第5章 初始化問題

旧版尊龙人生就是博下载常見錯誤47:賦值與初始化混淆

旧版尊龙人生就是博下载常見錯誤48:位于非適當轄域的變量

旧版尊龙人生就是博下载常見錯誤49:未能意識到C++語言中復制操作的固守行為

旧版尊龙人生就是博下载常見錯誤50:按位復制的class對象

常見錯誤51:未能區分構造函數中的初始化和賦值

常見錯誤52:未能在成員初始化列表中保持次序一致性

旧版尊龙人生就是博下载常見錯誤53:對于虛基類(子對象)進行默認初始化

常見錯誤54:復制構造函數對基類子對象初始化的未預期行為

常見錯誤55:運行期靜態初始化次序

旧版尊龙人生就是博下载常見錯誤56:直接vs.復制初始化

常見錯誤57:對實參的直接初始化

常見錯誤58:無視返回值優化

常見錯誤59:在構造函數中初始化靜態數據成員

第6章 內存和資源管理問題

旧版尊龙人生就是博下载常見錯誤60:未能區分純量與數組的內存分配機制

常見錯誤61:內存分配失敗校驗

常見錯誤62:用自定義版本替換全局的內存管理運算符所調用的函數

常見錯誤63:成員版本的operator new和operator delete的轄域和調用機制混淆

旧版尊龙人生就是博下载常見錯誤64:拋出字符串字面常量作為異常對象

旧版尊龙人生就是博下载常見錯誤65:未能正確理解和利用異常處理機制

常見錯誤66:濫用局部量地址

旧版尊龙人生就是博下载常見錯誤67:未能采用RAII習慣用法

常見錯誤68:對auto_ptr的誤用

第7章 多態問題

旧版尊龙人生就是博下载常見錯誤69:型別特征碼

常見錯誤70:將基類析構函數聲明為非虛函數

常見錯誤71:對非虛成員函數的遮掩

常見錯誤72:以過分靈活的方式濫用模板方法設計模式

旧版尊龙人生就是博下载常見錯誤73:重載虛函數

常見錯誤74:為實參指定默認初始化物的虛函數

常見錯誤75:在構造函數和析構函數中調用虛函數

常見錯誤76:虛賦值

常見錯誤77:未能區分函數的重載、改寫和遮掩

常見錯誤78:未能深入理解虛函數和改寫的實現機制

旧版尊龙人生就是博下载常見錯誤79:支配原則議題

第8章 型別設計問題

常見錯誤80:取/設狀態接口

常見錯誤81:常量和引用數據成員

旧版尊龙人生就是博下载常見錯誤82:未能理解常量成員函數

旧版尊龙人生就是博下载常見錯誤83:未能區分強聚合和弱聚合

常見錯誤84:非適當的運算符重載

旧版尊龙人生就是博下载常見錯誤85:運算符優先級和重載

旧版尊龙人生就是博下载常見錯誤86:友元vs.成員運算符

常見錯誤87:自增/自減運算符的問題

常見錯誤88:對模板化的復制操作的認識誤區

第9章 繼承譜系設計問題

常見錯誤89:持有class對象的數組

常見錯誤90:非適當的容器型別之可替換性

常見錯誤91:未能理解protected訪問層級

常見錯誤92:為代碼復用而以public方式繼承

常見錯誤93:以public方式繼承具象類

常見錯誤94:未能運用繼承譜系的退化形式

旧版尊龙人生就是博下载常見錯誤95:繼承的濫用

旧版尊龙人生就是博下载常見錯誤96:依型別分派的控制結構

旧版尊龙人生就是博下载常見錯誤97:單根譜系

常見錯誤98:向class對象打探隱私

常見錯誤99:權能查詢問題

中英文術語對照表

引用書目

C++覆轍錄 精彩文摘

旧版尊龙人生就是博下载說一個問題是基礎的,并不就是說它不是嚴重的或不是普遍存在的。事實上,本章所討論的基礎問題的共同特點比起在以后章節討論的技術復雜度而言,可能更側重于使人警醒。這里討論的問題,由于它們的基礎性,在某種程度上可以說它們普遍存在于幾乎所有的C++代碼中。

旧版尊龙人生就是博下载常見錯誤1:過分積極的注釋

很多注釋都是畫蛇添足,它們只會讓源代碼更難讀,更難維護,并經常把維護工程師引入歧途。考慮下面的簡單語句:

旧版尊龙人生就是博下载a = b; // 將b賦值給a

這個注釋難道比代碼本身更能說明這個語句的意義嗎?因而它是完全無用的。事實上,它比完全無用還要壞。它是害人精。首先,這條注釋轉移了代碼閱讀者的注意力,增加了閱讀量因而使代碼更費解。其次,要維護的東西更多了,因為注釋也是要隨著它描述的代碼的更改而更改的。最后,這個對注釋的更改常常會被遺忘:

旧版尊龙人生就是博下载c = b; // 將b賦值給a

仔細的維護工程師不會武斷地說注釋是錯的,所以他就被迫要去檢視整個程序以確定到底是注釋錯了呢,還是有意為之呢(c可能是a的引用),還是本來正確只是比較間接的呢(賦值給c可能引發一些傳播效應以使a的值也發生相應變化),等等,總之這一行就根本不應該帶注釋。

a = b;

還是這代碼本來的樣子最清楚地表明了其意義,也沒有額外的注釋需要維護。這在精神上也符合老生常談,亦即“最有效率的代碼就是根本不存在的代碼”。這條經驗對于注釋也適用:最好的注釋就是根本用不著寫的注釋,因為要注釋的代碼已經“自注釋”了。

另一些常見的非必要的注釋的例子經常可以在型別的定義里見到,它們要么是病態的編碼標準的怪胎,要么就是出自C++新手:

class C {

// 公開接口

public:

C(); // 默認構造函數

旧版尊龙人生就是博下载~C(); // 析構函數

// ...

};

你會覺得別人在挑戰你的智商。要是某個維護工程師連“public:”是什么意思都需要教,你還敢讓他碰你的代碼嗎?對于任何有經驗的C++軟件工程師而言,這些注釋除了給代碼添亂、增加需要維護的文本數量以外沒有任何用處:

class C {

// 公開接口

protected:

C( int ); // 默認構造函數

public:

virtual~C(); // 析構函數

// ...

};

軟件工程師還有一種強烈的心理趨勢就是盡量不要“平白無故”地在源文件文本中多寫哪怕一行。這里公布一個有趣的本行業秘密:如果某種結構(函數啦、型別的公開接口啦什么的)能被塞在一“頁”里,也就在三四十行左右的話,它就很容易理解。假如有些內容跑到第二頁去了,它理解起來就難了一倍。如果三頁才塞得下,據估計理解難度就成原來的4倍了。一種特別聲名狼藉的編碼實踐就是把更改日志作為注釋插入到源文件的頭部或尾部:

旧版尊龙人生就是博下载/* 6/17/02 SCD把一個該死的bug干掉了 */

這到底是有用的信息,抑或是僅僅是維護工程師的自吹自擂?在這行注釋被寫下以后的一兩個星期,它怎么看也不再像是有用的了,但它卻也許要在代碼里粘上很多年,欺騙著一批又一批的維護工程師。最好是用你的版本控制軟件來做這種無用注釋真正想做的事,C++的源代碼文件里可沒有閑地方來放這些勞什子。

圖書網:C++覆轍錄pdf

繼續閱讀

說出你想要的,我們幫你找→→→社區

  • 我的微信
  • 掃一掃加好友
  • weinxin
  • 微信公眾號
  • 掃一掃關注
  • weinxin
JRockit權威指南 深入理解JVMpdf 程序設計

JRockit權威指南 深入理解JVMpdf

作為曾經的三大主流Java虛擬機之一,JRockit展示了強大的伸縮性和高勁的性能,現在雖已被內置于Oracle融合中間件中,但JVM原理以及JMC工具等內容是相通的。 本書由JR...
iOS 11 開發指南pdf 程序設計

iOS 11 開發指南pdf

iOS 11 開發指南 作者:管蕾 iOS 11 開發指南 出版社:人民郵電出版社 iOS 11 開發指南 內容簡介 本書循序漸進地講解了iOS 11應用開發的知識。書中從搭建開發環境講起,依次講解了...
零起點Python足彩大數據與機器學習實盤分析pdf 程序設計

零起點Python足彩大數據與機器學習實盤分析pdf

適讀人群 : 足球愛好者、博彩愛好者,數據分析從業人員、數學、統計、計算機專業學生。 采用MBA個案模式,配合Python教學代碼,由淺入深,結合實盤案例,舉一反三。無須專業編程基...
Java微服務pdf 程序設計

Java微服務pdf

適讀人群 :本書適合想要了解微服務架構,以及想要深入了解如何有效地實施企業級微服務的Java開發人員。 在本書中可以學到: ■ 使用領域驅動設計方法來設計和實現微服務 ■ 使用Sp...
匿名

發表評論

匿名網友 填寫信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: