發表於2024-12-19
資深C++專傢、C++11布道師、金山軟件資深工程師撰寫
深度剖析C++11中常用新特性,從程序簡潔性、性能、代碼質量、內存泄露、多綫程等多方麵給齣瞭代碼優化的方法和建議
深入講解瞭C++11在綫程池開發、流行框架和庫的開發、庫的封裝等各種工程級項目中的應用,包含大量實現源碼並開源,可直接使用
在StackOverflow的最近一次世界性調查中,C++11在所有的編程語言中排名第二, C++11受到程序員的追捧是毫不意外的,因為它就像C++之父Bjarne Stroustrup說的:它看起來就像一門新的語言。C++11新增加瞭相當多的現代編程語言的特性,相比C++98/03,它在生産力、安全性、性能和易用性上都有瞭大幅提高。比如auto和decltype讓我們從書寫冗長的類型和繁瑣的類型推斷中解脫齣來,智能指針讓我們再也不用擔心內存泄漏的問題,右值引用避免瞭無謂的臨時對象拷貝,type_traits和可以變模闆參數讓我們可以更方便地寫更加泛化的代碼……這些還隻是新增的一百多項新特性中的一小部分而已。C++14的標準在2014年的時候已經確定,而C++17標準正在製定當中,可以預見的未來,C++的發展會越來越好,C++的應用會越來越廣泛,也會更受廣大開發者地歡迎。
本書的內容來源於C++11項目實踐,寫作此書的目的是為瞭和廣大讀者分享學習和應用C++11的經驗和樂趣。本書分為兩篇,第一篇主要是介紹一些常用的C++11特性,介紹這些特性是如何優化C++11以前的一些代碼的,讀者可以從中更深刻地領悟這些新特性;第二篇主要是一些實際開發中的典型應用案例,通過這些案例讀者可以看到C++11的這些新特性是如何綜閤運用於實際開發中的,具有實踐的指導作用。相信本書會成為讀者學習和應用C++11的良師益友。
資深C++專傢、C++11布道師、金山軟件資深工程師撰寫
深度剖析C++11中常用新特性,從程序簡潔性、性能、代碼質量、內存泄露、多綫程等多方麵給齣瞭代碼優化的方法和建議
深入講解瞭C++11在綫程池開發、流行框架和庫的開發、庫的封裝等各種工程級項目中的應用,包含大量實現源碼並開源,可直接使用
在StackOverflow的最近一次世界性調查中,C++11在所有的編程語言中第二, C++11受到程序員的追捧是毫不意外的,因為它就像C++之父Bjarne Stroustrup說的:它看起來就像一門新的語言。C++11新增加瞭相當多的現代編程語言的特性,相比C++98/03,它在生産力、安全性、性能和易用性上都有瞭大幅提高。比如auto和decltype讓我們從書寫冗長的類型和繁瑣的類型推斷中解脫齣來,智能指針讓我們再也不用擔心內存泄漏的問題,右值引用避免瞭無謂的臨時對象拷貝,type_traits和可以變模闆參數讓我們可以更方便地寫更加泛化的代碼……這些還隻是新增的一百多項新特性中的一小部分而已。C++14的標準在2014年的時候已經確定,而C++17標準正在製定當中,可以預見的未來,C++的發展會越來越好,C++的應用會越來越廣泛,也會更受廣大開發者地歡迎。
本書的內容來源於C++11項目實踐,寫作此書的目的是為瞭和廣大讀者分享學習和應用C++11的經驗和樂趣。本書分為兩篇,篇主要是介紹一些常用的C++11特性,介紹這些特性是如何優化C++11以前的一些代碼的,讀者可以從中更深刻地領悟這些新特性;第二篇主要是一些實際開發中的典型應用案例,通過這些案例讀者可以看到C++11的這些新特性是如何綜閤運用於實際開發中的,具有實踐的指導作用。相信本書會成為讀者學習和應用C++11的良師益友。
更多精彩,點擊進入品牌店查閱>>
這是C++11領域實用性和工程實踐價值的著作。作者是金山軟件的資深工程師,有多年一綫開發經驗,緻力於C++11的應用和推廣。C++11新特性眾多,作者根據自己幾年來的研究和實踐,甄選齣瞭其中最常用和實用的部分新特性,並結閤代碼實例講解瞭如何通過這些新特性來優化既有的C++代碼,這部分內容不僅能讓你迅速掌握C++11,而且能充分讓你領略C++11的魅力。更為重要的,作者還結閤自己的企業實踐和開源項目,講解瞭如何利用C++11開發各種常用的工程級項目,並且所有項目的代碼均開源,具有非常高的使用價值。
全書共16章,分為兩個部分
部分 C++11改進我們的程序
使用類型推導、lambda、tupe元組等新特性讓程序變得更簡潔和更現代;
使用右值引用、move語義、emplace_back等新特性改進程序的性能;
使用可變參數模闆和類型萃取等新特性消除重復和提高代碼質量;
使用智能指針相關新特性解決內存泄露問題;
使用綫程、互斥量、異步操作等新特性讓多綫程開發更簡單;
……
第二部分 C++11工程實踐
用C++11改進各種常用的設計模式,如單例模式、觀察者模式、訪問者模式,等等;
用C++11開發一個半同步半異步綫程池、消息總綫庫和通信程序;
用C++11開發輕量級AOP庫、輕量級IoC容器、輕量級的並行task庫
用C++11封裝SQLite庫和開發linq to objects庫;
……
祁 宇 資深C++技術專傢,緻力於C++11的應用、研究和推廣。金山軟件WPS資深工程師,負責Android服務端開發。精通OOP、OOD、設計模式和重構,主要研究方嚮為架構設計和業務重構,有豐富的開發和研發管理經驗。愛好C++,愛好開源,樂於研究和分享技術,開源瞭多個項目,在《程序員》雜誌發錶多篇技術文章。
2013年被評為珠海市優秀青年人纔。
前言
第一篇 C++11改進我們的程序
第1章 使用C++11讓程序更簡潔、更現代,
1.1 類型推導
1.1.1 auto類型推導
1.1.2 decltype關鍵字
1.1.3 返迴類型後置語法——auto和decltype的結閤使用
1.2 模闆的細節改進
1.2.1 模闆的右尖括號
1.2.2 模闆的彆名
1.2.3 函數模闆的默認模闆參數
1.3 列錶初始化
1.3.1 統一的初始化
1.3.2 列錶初始化的使用細節
1.3.3 初始化列錶
1.3.4 防止類型收窄
1.4 基於範圍的for循環
1.4.1 for循環的新用法
1.4.2 基於範圍的 for循環的使用細節
1.4.3 讓基於範圍的 for循環支持自定義類型
1.5 std::function和bind綁定器
1.5.1 可調用對象
1.5.2 可調用對象包裝器——std::function
1.5.3 std::bind綁定器
1.6 lambda錶達式
1.6.1 lambda錶達式的概念和基本用法
1.6.2 聲明式的編程風格,簡潔的代碼
1.6.3 在需要的時間和地點實現閉包,使程序更靈活
1.7 tupe元組
1.8 總結
第2章 使用C++11改進程序性能
2.1 右值引用
2.1.1 &&的特性
2.1.2 右值引用優化性能,避免深拷貝
2.2 move語義
2.3 forward和完美轉發
2.4 emplace_back減少內存拷貝和移動
2.5 unordered container無序容器
2.6 總結
第3章 使用C++11消除重復,提高代碼質量
3.1 type_traits——類型萃取
3.1.1 基本的type_traits
3.1.2 根據條件選擇的traits
3.1.3 獲取可調用對象返迴類型的traits
3.1.4 根據條件禁用或啓用某種或某些類型traits
3.2 可變參數模闆
3.2.1 可變參數模闆函數
3.2.2 可變參數模闆類
3.2.3 可變參數模闆消除重復代碼
3.3 可變參數模版和type_taits的綜閤應用
3.3.1 optional的實現
3.3.2 惰性求值類lazy的實現
3.3.3 dll幫助類
3.3.4 lambda鏈式調用
3.3.5 any類的實現
3.3.6 function_traits
3.3.7 variant的實現
3.3.8 ScopeGuard
3.3.9 tuple_helper
3.4 總結
第4章 使用C++11解決內存泄露的問題
4.1 shared_ptr共享的智能指針
4.1.1 shared_ptr的基本用法
4.1.2 使用shared_ptr需要注意的問題
4.2 unique_ptr獨占的智能指針
4.3 weak_ptr弱引用的智能指針
4.3.1 weak_ptr基本用法
4.3.2 weak_ptr返迴this指針
4.3.3 weak_ptr解決循環引用問題
4.4 通過智能指針管理第三方庫分配的內存
4.5 總結
第5章 使用C++11讓多綫程開發變得簡單
5.1 綫程
5.1.1 綫程的創建
5.1.2 綫程的基本用法
5.2 互斥量
5.2.1 獨占互斥量std::mutex
5.2.2 遞歸互斥量std::recursive_mutex
5.2.3 帶超時的互斥量std::timed_mutex和std::recursive_timed_mutex
5.3 條件變量
5.4 原子變量
5.5 call_once/once_flag的使用
5.6 異步操作
5.6.1 獲取綫程函數返迴值的類std::future
5.6.2 協助綫程賦值的類 std::promise
5.6.3 可調用對象的包裝類std::package_task
5.6.4 std::promise、std::packaged_task和std::future三者之間的關係
5.7 綫程異步操作函數async
5.8 總結
第6章 使用C++11中便利的工具
6.1 處理日期和時間的chrono庫
6.1.1 記錄時長的duration
6.1.2 錶示時間點的time point
6.1.3 獲取係統時鍾的clocks
6.1.4 計時器timer
6.2 數值類型和字符串的相互轉換
6.3 寬窄字符轉換
6.4 總結
第7章 C++11的其他特性
7.1 委托構造函數和繼承構造函數
7.1.1 委托構造函數
7.1.2 繼承構造函數
7.2 原始的字麵量
7.3 f?inal和override關鍵字
7.4 內存對齊
7.4.1 內存對齊介紹
7.4.2 堆內存的內存對齊
7.4.3 利用alignas指定內存對齊大小
7.4.4 利用alignof和std::alignment_of獲取內存對齊大小
7.4.5 內存對齊的類型std::aligned_storage
7.4.6 std::max_align_t和std::align操作符
7.5 C++11新增的便利算法
7.6 總結
第二篇 C++11工程級應用
第8章 使用C++11改進我們的模式
8.1 改進單例模式
8.2 改進觀察者模式
8.3 改進訪問者模式
8.4 改進命令模式
8.5 改進對象池模式
8.6 總結
第9章 使用C++11開發一個半同步半異步綫程池
9.1 半同步半異步綫程池介紹
9.2 綫程池實現的關鍵技術分析
9.3 同步隊列
9.4 綫程池
9.5 應用實例
9.6 總結
第10章 使用C++11開發一個輕量級的AOP庫
10.1 AOP介紹
10.2 AOP的簡單實現
10.3 輕量級的AOP框架的實現
10.4 總結
第11章 使用C++11開發一個輕量級的IoC容器
11.1 IoC容器是什麼
11.2 IoC創建對象
11.3 類型擦除的常用方法
11.4 通過Any和閉包來擦除類型
11.5 創建依賴的對象
11.6 完整的IoC容器
11.7 總結
第12章 使用C++11開發一個對象的消息總綫庫
12.1 消息總綫介紹
12.2 消息總綫關鍵技術
12.2.1 通用的消息定義
12.2.2 消息的注冊
12.2.3 消息分發
12.2.4 消息總綫的設計思想
12.3 完整的消息總綫
12.4 應用實例
12.5 總結
第13章 使用C++11封裝sqlite庫
13.1 sqlite基本用法介紹
13.1.1 打開和關閉數據庫的函數
13.1.2 執行SQL語句的函數
13.2 rapidjson基本用法介紹
13.2.1 解析json字符串
13.2.2 創建json對象
13.2.3 對rapidjson的一點擴展
13.3 封裝sqlite的SmartDB
13.3.1 打開和關閉數據庫的接口
13.3.2 Excecute接口
13.3.3 ExecuteScalar接口
13.3.4 事務接口
13.3.5 ExcecuteTuple接口
13.3.6 json接口
13.3.7 查詢接口
13.4 應用實例
13.5 總結
第14章 使用C++11開發一個linq to objects庫
14.1 LINQ介紹
14.1.1 LINQ語義
14.1.2 Linq標準操作符(C#)
14.2 C++中的LINQ
14.3 LINQ實現的關鍵技術
14.3.1 容器和數組的泛化
14.3.2 支持所有的可調用對象
14.3.3 鏈式調用
14.4 linq to objects的具體實現
14.4.1 一些典型LINQ操作符的實現
14.4.2 完整的linq to objects的實現
14.5 linq to objects的應用實例
14.6 總結
第15章 使用C++11開發一個輕量級的並行task庫
15.1 TBB的基本用法
15.1.1 TBB概述
15.1.2 TBB並行算法
15.1.3 TBB的任務組
15.2 PPL的基本用法
15.2.1 PPL任務的鏈式連續執行
15.2.2 PPL的任務組
15.3 TBB和PPL的選擇
15.4 輕量級的並行庫TaskCpp的需求
15.5 TaskCpp的任務
15.5.1 task的實現
15.5.2 task的延續
15.6 TaskCpp任務的組閤
15.6.1 TaskGroup
15.6.2 WhenAll
15.6.3 WhenAny
15.7 TaskCpp並行算法
15.7.1 ParallelForeach:並行對區間元素執行某種操作
15.7.2 ParallelInvoke:並行調用
15.7.3 ParallelReduce:並行匯聚
15.8 總結
第16章 使用C++11開發一個簡單的通信程序
16.1 反應器和主動器模式介紹
16.2 asio中的Proactor
16.3 asio的基本用法
16.3.1 異步接口
16.3.2 異步發送
16.4 C++11結閤asio實現一個簡單的服務端程序
16.5 C++11結閤asio實現一個簡單的客戶端程序
16.6 TCP粘包問題的解決
16.7 總結
參考文獻
為什麼要寫這本書2011年C++11標準剛發布時,廣大C++開發者奔走相告,我也在第一時間看瞭C++之父Bjarne,Stroustrup的C++11 FAQ(http://www.stroustrup.com/C++11FAQ.html),雖然隻介紹瞭一部分特性,而且特性的用法介紹也很簡短,但給我帶來三個震撼:第一個震撼是發現我幾乎不認識C++瞭,這麼多新特性,與以前的C++很不同;第二個震撼是很多東西和其他語言類似,比如C#或者Java,感覺很酷;第三個震撼是很潮,比如lambda特性,Java都還沒有(那時Java 8還沒齣來),C++11已經有瞭。我是一個喜歡研究新技術的人,一下子就被C++那麼多新特性吸引住瞭,連續幾天都在看FAQ,完全著迷瞭,雖然當時有很多地方沒看明白,但仍然很興奮,因為我知道這就是我想要的C++。我馬上更新編譯器嘗鮮,學習新特性。經過一段時間的學習,在對一些主要特性有一定的瞭解之後,我決定在新項目中使用C++11。用C++11的感覺非常好:有瞭auto就不用寫冗長的類型定義瞭,有瞭lambda就不用定義函數對象瞭,算法也用得更舒服和自然,初始化列錶讓容器和初始化變得很簡便,還有右值引用、智能指針和綫程等其他很棒的特性。C++11確實讓項目的開發效率提高瞭很多。
相比C++98/03,C++11做瞭大幅度的改進,增加瞭相當多的現代編程語言的特性,使得C++的開發效率有瞭很大的提高。比如,C++11增加瞭右值引用,可以避免無謂的復製,從而提高程序性能;C++11增加瞭可變模闆參數,使C++的泛型編程能力更加強大,也大幅消除瞭重復模闆定義;C++11增加瞭type_traits,可以使我們很方便地在編譯期對類型進行計算、查詢、判斷、轉換和選擇;C++11中增加的智能指針使我們不用擔心內存泄露問題瞭;C++11中的綫程庫讓我們能很方便地編寫可移植的並發程序。除瞭這些較大的改進之外,C++11還增加瞭很多其他實用、便利的特性,提高瞭開發的便利性。對於一個用過C#的開發者來說,學習C++11一定會有一種似曾相識的感覺,比如C++11的auto、for-loop循環、lambda錶達式、初始化列錶、tuple等分彆對應瞭C#中的var、for-loop循環、lambda錶達式、初始化列錶、tuple,這些小特性使我們編寫C++程序更加簡潔和順手。C++11增加的這些特性使程序編寫變得更容易、更簡潔、更高效、更安全和更強大,那麼我們還有什麼理由不去學習這些特性並充分享受這些特性帶來的好處呢?學習和使用C++11不要背著C++的曆史包袱,要輕裝上陣,把它當作一門新的語言來學習,纔能發現它的魅力和學習的樂趣。C++11增加的新特性有一百多項,很多人質疑這會使本已復雜的C++語言變得更加復雜,從而産生一種抗拒心理,其實這是對C++11的誤解,C++11並沒有變得更復雜,恰恰相反,它在做簡化和改進!比如auto和decltype可以用來避免寫冗長的類型,bind綁定器讓我們不用關注到底是用bind1st還是bind2nd瞭,lambda錶達式讓我們可以不必寫大量的不易維護的函數對象等。
語言都是在不斷進化之中的,隻有跟上時代潮流的語言纔是充滿活力與魅力的語言。C++正是這樣一門語言,雖然它已經有三十多年的曆史瞭,但是它還在發展之中。C++14標準已經製定完成,C++17也提上瞭日程,我相信C++的未來會更加美好,C++開發者的日子也會越來越美好!
作為比較早使用C++11的開發者,我開始在項目中應用C+
華章原創精品·深入應用C++11:代碼優化與工程級應用 下載 mobi epub pdf txt 電子書 格式
華章原創精品·深入應用C++11:代碼優化與工程級應用 下載 mobi pdf epub txt 電子書 格式 2024
華章原創精品·深入應用C++11:代碼優化與工程級應用 下載 mobi epub pdf 電子書三個版本都買瞭。就是內容一樣描述語言不一樣
評分C語言裏麵的定義的指針,它除瞭錶示一個地址,它還帶有類型信息。
評分不錯不錯不錯不錯不錯不錯
評分我以前學的數據結構有些差彆 這裏增加瞭算法分析對學習有很大的幫助
評分寫得不錯,可惜太難瞭
評分包裝非常好,沒有破損,物流很快,隔天到! 書沒有瑕疵,完美
評分挺不錯的,很滿意的購物。
評分可以,就是紙麵有點薄,看得到背麵的字。
評分圖書非常好,正是我想要的。
華章原創精品·深入應用C++11:代碼優化與工程級應用 mobi epub pdf txt 電子書 格式下載 2024