TOP
英國出版界指標大獎肯定!A.F. Steadman 獲年度作家,《史坎德》系列帶你踏上熱血奇幻旅程
Exceptional C++:47個C++工程難題、編程問題和解決方案(中文版)(簡體書)
滿額折

Exceptional C++:47個C++工程難題、編程問題和解決方案(中文版)(簡體書)

商品資訊

人民幣定價:59 元
定價
:NT$ 354 元
優惠價
87308
絕版無法訂購
無法訂購
作者簡介
名人推薦
目次
書摘/試閱

作者簡介

作者:(美國)薩特(Sutter H.) 譯者:聶雪軍

名人推薦

《Exceptional C++:47個C++工程難題、編程問題和解決方案(中文版)》中的每個問題都給出了難度系數,在這些問題中闡釋一些微妙的編程錯洪以及程式設計上的考慮。在閱瀆書中給出的解答之前,你可以先嘗試自己進行解答。《Exceptional C++:47個C++工程難題、編程問題和解決方案(中文版)》將對這些問題進行洋細的分析,並指出哪些地方是錯誤的,以及如何改正這個問題。

目次

1 泛型程式設計與C++標準庫
條款1:迭代器難度系數
條款2:大小寫不敏感的字串——之一
條款3:大小寫不敏感的字串——之二
條款4:可重用性最高的泛型容器——之一
條款5:可重用性最高的泛型容器——之二
條款6:臨時對象
條款7:標準庫的使用(或者,再論臨時對象)
2 異常安全性相關的問題與技術
條款8:編寫異常安全的代碼——之一
條款9:編寫異常安全的代碼——之二
條款10:編寫異常安全的代碼——之三
條款11:編寫異常安全的代碼——之四
條款12:編寫異常安全的代碼——之五
條款13:編寫異常安全的代碼——之六
條款14:編寫異常安全的代碼——之七
條款15:編寫異常安全的代碼——之八
條款16:編寫異常安全的代碼——之九
條款17:編寫異常安全的代碼——之十
條款18:代碼的復雜性——之一
條款19:代碼的復雜性——之二
3 類的設計與繼承
條款20:類的編寫技巧
條款21:虛函數的重載
條款22:類之間的關系——之一
條款23:類之間的關系——之二
條款24:繼承的使用和濫用
條款25:面向對象程式設計
4 編譯器防火墻和Pimpl慣用法
條款26:將編譯期依賴性降到最低——之一
條款27:將編譯期依賴性降到最低——之二
條款28:將編譯期依賴性降到最低——之三
條款29:編譯防火墻
條款30:Fast Pimpl慣用法
5 名字查找、名字空間和介面規則
條款31:名字查找與介面規則——之一
條款32:名字查找與介面規則——之二
條款33:名字查找和介面規則——之三
條款34:名字查找與介面規則——之四
6 內存管理
條款35:內存管理——之一
條款36:內存管理——之二
條款37:AUTO_PTR
7 誤區、陷阱以及錯誤的慣用法
條款38:對象標識
條款39:自動轉換
條款40:對象的生存期——之一
條款41:對象的生存期——之二
8 其他主題
條款42:變量的初始化
條款43:正確使用const
條款44:類型轉換
條款45:BOOL
條款46:轉調函數
條款47:控制流程
後記
參考書目

書摘/試閱



從Gury of the Week條款8的最初發布到現在,這一系列的條款已經走過了很長的一段路程。我希望你能喜歡它們並且發現它們確實很有用。我要特別感謝委員會成員Dave Abrahams和Greg Colvin,感謝他們在闡述異常安全性上的深刻洞察力,以及對這部分內容的草稿所提出的中肯批評。Dave和Grep,以及Matt Austern,他們一起編寫了兩個完整的會議提案,這些提案的議題是將當前的異常安全性保證添加到標準庫中。
在這個系列的條款中,我們將討論兩個主題:首先是C++的兩個主要特性,異常處理和範本,我們將分析如何編寫異常安全的代碼(即在出現異常的情況下代碼仍能正確運行);其次是異常中立(即將所有的異常都轉發給調用者)的泛型容器。這些東西說起來很容易,但做起來絕不輕松。
現在,我們一起來實現一個簡單的容器(一個能執行壓入操作和彈出操作的棧),並分析如果要使這個容器成為異常安全的和異常中立的,我們需要解決哪些問題。
我們將從Cargill停下來的地方開始——也就是,逐步地創建一個異常安全的範本stack,而cargill當初也正是以Stack為例來提出他的問題的。稍後,我們將降低對範本參數類型T的需求,顯著改善Stack容器,然後還將給出一些高級技巧,用於在管理資源時實現異常安全性。按照這種方法,我們可以找出下列問題的答案:
異常安全性的不同“級別”指的是什麼?
泛型容器可以是或者說應該是完全異常中立的嗎?
標準庫中的容器類是異常安全的還是異常中立的?
異常安全性會不會影響對容器公共介面的設計?
在泛型容器中應該使用異常規範嗎?
這個構造函數是異常安全的和異常中立的嗎?要搞清楚這個問題,我們先考慮在哪些地方將可能拋出異常。簡單來說,答案就是:在每個函數中。因此,第一步就是對上述代碼進行分析並確定實際調用了哪些函數,包括自由函數、構造函數、析構函數、運算符重載函數,以及其他的成員函數。
在Stack的構造函數中,首先將vsize_設為10,然後通過new T(vsize_)來分配初始內存。後者將首先調用operator new()()(或者是默認的operator new(),或者是由T提供的operator new())來分配內存,然後再調用vsize_次T::T函數。在這個過程中有兩個操作可能會失敗。第一個操作是內存分配操作本身,在失敗的情況下。perator new()()將拋出一個bad alloc異常。第二個操作是T的默認構造函數,在這個函數中可能拋出任意的異常,在這種情況下,所有已經構造的T對象都會被銷毀,並且通過調用。perator delete()()來確保已分配的內存被自動回收。
因此,上面的函數是完全異常安全的和異常中立的,我們繼續來看下一個問題……什麼?你問為什麼這個函數是健壯的?好吧,我們對這個函數進行更為詳細的討論。
1.這個函數是異常中立的。在函數中不會捕獲任何異常,因此,如果new拋出了異常,那麼這個異常就會像我們所要求的那樣被正確地轉發給調用者。

購物須知

大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。

特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。

無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。

為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。

若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。

優惠價:87 308
絕版無法訂購

暢銷榜

客服中心

收藏

會員專區