![](/c3/10086613108344.jpg)
出版社:機械工業出版社 ISBN:9787111734352 商品編碼:10086613108344 品牌:文軒 出版時間:2023-09-01 代碼:199 作者:喬什·洛斯皮諾索(JoshLospinoso
"![](http://img14.360buyimg.com/cms/jfs/t1/203358/9/26405/134589/62f4a34cEcdefae53/84e082ed3b03dbc0.jpg) 預售商品須知 預售商品請單獨下單,到貨後將盡快安排為您發出。 若您將預售商品與其他商品一並購買,則該訂單默認在預售商品到貨後發出,拍下即視為認可,謝謝您的支持。 作 者:[美] 喬什·洛斯皮諾索(Josh Lospinoso) 著 定 價:199 出 版 社:機械工業出版社 出版日期:2023年09月01日 頁 數:637 裝 幀:平裝 ISBN:9787111734352 C++是軟件開發中使用非常廣泛的語言之一。在經驗豐富的程序員眼中,C++可以寫出任何程序員都會引以為傲的可讀性較高、短小精悍且高效的代碼。你將通過本書學習現代C++的所有主要特性,包括: ?基本類型、引用類型和用戶自定義類型; ?使用模板的編譯時多態和使用虛擬類的運行時多態; ?對像生命周期,包括存儲期、調用棧、內存管理、異常和RAII範式; ?高級表達式、語句和函數; ?智能指針、數據結構、日期和時間、數值工具和概率/統計工具; ?容器、迭代器、字符串和算法; ?流、文件、並發性、網絡和應用程等 ●目 錄 Contents <br />序<br />前言<br />致C語言程序員<br />第一部分 C++語言核心<br />第1章 啟動和運行2<br />1.1 C++程序的基本結構2<br />1.1.1 創建第一個C++源文件3<br />1.1.2 main函數:C++程序的入口點3<br />1.1.3 程序庫:引入外部代碼3<br />1.2 編譯器工具鏈4<br />1.2.1 設置開發環境4<br />1.2.2 Windows 10以及後續版本:<br /> Visual Studio5<br />1.2.3 macOS: Xcode6<br />1.2.4 Linux和GCC7<br />1.2.5 文本編輯器10<br />1.3 開始認識C++11<br />1.3.1 C++類型繫統11<br />1.3.2 聲明變量11<br />1.3.3 初始化變量的狀態11<br />1.3.4 條件語句12<br />1.3.5 函數14<br />1.3.6 printf格式指定符15<br />1.3.7 重新審視step_function16<br />1.3.8 注釋 17<br />1.4 調試18<br />1.4.1 Visual Studio18<br />1.4.2 Xcode19<br />1.4.3 用GDB和LLDB對GCC和<br /> Clang進行調試20<br />1.5 總結23<br />練習23<br />拓展閱讀24<br />第2章 類型25<br />2.1 基本類型25<br />2.1.1 整數類型25<br />2.1.2 浮點類型28<br />2.1.3 字符類型30<br />2.1.4 布爾類型31<br />2.1.5 std::byte類型33<br />2.1.6 size_t類型34<br />2.1.7 void35<br />2.2 數組35<br />2.2.1 數組初始化35<br />2.2.2 訪素35<br />2.2.3 for循環簡介36<br />2.2.4 C風格字符串38<br />2.3 用戶自定義類型41<br />2.3.1 枚舉類型41<br />2.3.2 普通數據類44<br />2.3.3 聯合體45<br />2.4 全功能的C++類46<br />2.4.1 方法47<br />2.4.2 訪問控制47<br />2.4.3 構造函數49<br />2.4.4 初始化51<br />2.4.5 析構函數55<br />2.5 總結56<br />練習56<br />拓展閱讀56<br />第3章 引用類型57<br />3.1 指針57<br />3.1.1 尋址變量58<br />3.1.2 指針解引用59<br />3.1.3 成員指針運算符60<br />3.1.4 指針和數組61<br />3.1.5 指針很危險63<br />3.1.6 void指針和std::byte指針65<br />3.1.7 nullptr和布爾表達式65<br />3.2 引用65<br />3.3 指針和引用的使用66<br />3.3.1 前向鏈表:經典的基於指針的<br /> 數據結構66<br />3.3.2 使用引用68<br />3.3.3 this指針69<br />3.3.4 const正確性69<br />3.3.5 const成員變量71<br />3.3.6 成員初始化列表71<br />3.4 auto類型推斷72<br />3.4.1 用auto進行初始化73<br />3.4.2 auto和引用類型73<br />3.4.3 auto和代碼重構73<br />3.5 總結74<br />練習74<br />拓展閱讀75<br />第4章 對像生命周期76<br />4.1 對像的存儲期76<br />4.1.1 分配、釋放和生命周期76<br />4.1.2 內存管理77<br />4.1.3 自動存儲期77<br />4.1.4 靜態存儲期77<br />4.1.5 線程局部存儲期80<br />4.1.6 動態存儲期81<br />4.2 追蹤對像的生命周期83<br />4.3 異常84<br />4.3.1 throw關鍵字84<br />4.3.2 使用try-catch代碼塊85<br />4.3.3 stdlib異常類86<br />4.3.4 異常處理88<br />4.3.5 用戶定義的異常89<br />4.3.6 noexcept關鍵字90<br />4.3.7 調用棧和異常90<br />4.4 SimpleString類92<br />4.4.1 追加和打印93<br />4.4.2 使用SimpleString94<br />4.4.3 組合SimpleString95<br />4.4.4 調用棧展開96<br />4.4.5 異常和性能98<br />4.4.6 異常的替代方法98<br />4.5 復制語義99<br />4.5.1 復制構造函數101<br />4.5.2 復制賦值103<br />4.5.3 默認復制105<br />4.5.4 復制指南106<br />4.6 移動語義106<br />4.6.1 復制行為可能浪費資源106<br />4.6.2 值類別108<br />4.6.3 左值引用和右值引用108<br />4.6.4 std::move函數109<br />4.6.5 移動構造110<br />4.6.6 移動賦值110<br />4.6.7 最終成果111<br />4.6.8 編譯器生成的方法113<br />4.7 總結114<br />練習114<br />拓展閱讀115<br />第5章 運行時多態116<br />5.1 多態116<br />5.2 一個有啟發性的例子116<br />5.2.1 添加新的日志記錄器119<br />5.2.2 接口119<br />5.2.3 對像組合和實現繼承119<br />5.3 定義接口120<br />5.3.1 基類繼承120<br />5.3.2 成員繼承121<br />5.3.3 虛方法122<br />5.3.4 純虛類和虛析構函數124<br />5.3.5 實現接口125<br />5.3.6 使用接口126<br />5.4 更新銀行日志記錄器126<br />5.4.1 構造函數注入127<br />5.4.2 屬性注入127<br />5.4.3 構造函數注入和屬性注入的<br /> 選擇128<br />5.5 總結129<br />練習129<br />拓展閱讀129<br />第6章 編譯時多態130<br />6.1 模板130<br />6.2 聲明模板130<br />6.2.1 模板類定義131<br />6.2.2 模板函數定義131<br />6.2.3 實例化模板131<br />6.3 類型轉換函數132<br />6.3.1 const_cast132<br />6.3.2 static_cast133<br />6.3.3 reinterpret_cast134<br />6.3.4 narrow_cast134<br />6.4 mean:模板函數示例136<br />6.4.1 通用mean136<br />6.4.2 模板類型推斷138<br />6.5 SimpleUniquePointer:模板類<br /> 示例139<br />6.6 模板中的類型檢查142<br />6.7 concept143<br />6.7.1 定義concept143<br />6.7.2 類型特征144<br />6.7.3 約束要求146<br />6.7.4 從requires表達式構建<br /> concept147<br />6.7.5 使用concept147<br />6.7.6 臨時requires表達式151<br />6.8 static_assert:concept之前的權宜<br /> 之計153<br />6.9 非類型模板參數154<br />6.10 可變參數模板156<br />6.11 高級模板主題156<br />6.11.1 模板特化156<br />6.11.2 名字綁定157<br />6.11.3 類型函數157<br />6.11.4  編程157<br />6.12 模板源代碼組織157<br />6.13 運行時多態與編譯時多態對比158<br />6.14 總結158<br />練習158<br />拓展閱讀159<br />第7章 表達式160<br />7.1 運算符160<br />7.1.1 邏輯運算符160<br />7.1.2 算術運算符161<br />7.1.3 賦值運算符162<br />7.1.4 自增和自減運算符163<br />7.1.5 比較運算符163<br />7.1.6 成員訪問運算符164<br />7.1.7 &nbs條件運算符164<br />7.1.8 逗號運算符165<br />7.1.9 重載運算符165<br />7.1.10 重載運算符new167<br />7.1.11 運算符優先級和結合性172<br />7.1.12 求值順序174<br />7.2 自定義字面量175<br />7.3 類型轉換175<br />7.3.1 隱式類型轉換176<br />7.3.2 顯式類型轉換178<br />7.3.3 C風格的類型轉換179<br />7.3.4 用戶自定義類型的轉換180<br />7.4 常量表達式181<br />7.4.1 有關色彩的示例182<br />7.4.2 關於constexpr的說明184<br />7.5 volatile表達式184<br />7.6 總結185<br />練習186<br />拓展閱讀186<br />第8章 語句187<br />8.1 表達式語句187<br />8.2 復合語句188<br />8.3 聲明語句189<br />8.3.1 函數189<br />8.3.2 命名空間192<br />8.3.3 類型別名195<br />8.3.4 結構化綁定197<br />8.3.5 屬性198<br />8.4 選擇語句199<br />8.4.1 if語句199<br />8.4.2 switch語句203<br />8.5 迭代語句204<br />8.5.1 while循環204<br />8.5.2 do-while循環205<br />8.5.3 for循環206<br />8.5.4 基於範圍的for循環208<br />8.6 跳轉語句211<br />8.6.1 break語句212<br />8.6.2 continue語句212<br />8.6.3 goto語句213<br />8.7 總結214<br />練習215<br />拓展閱讀215<br />第9章 函數216<br />9.1 函數聲明216<br />9.1.1 前綴修飾符216<br />9.1.2 後綴修飾符217<br />9.2 auto返回類型220<br />9.3 auto和函數模板220<br />9.4 重載解析221<br />9.5 可變參數函數222<br />9.6 可變參數模板223<br />9.6.1 用參數包編程223<br />9.6.2 再談sum函數224<br />9.6.3 折疊表達式225<br />9.7 函數指針225<br />9.7.1 聲明函數指針225<br />9.7.2 類型別名和函數指針226<br />9.8 函數調用運算符227<br />9.9 計數例子227<br />9.10 lambda表達式229<br />9.10.1 用法229<br />9.10.2 參數和表達式體230<br />9.10.3 默認參數231<br />9.10.4 泛型232<br />9.10.5 返回類型233<br />9.10.6 捕獲列表233<br />9.10.7 constexpr lambda表達式239<br />9.11 std :: function 239<br />9.11.1 聲明函數239<br />9.11.2 擴展示例240<br />9.12 main函數和命令行242<br />9.12.1 main的三個重載變體242<br />9.12.2 程序參數243<br />9.12.3 更深入的例子244<br />9.12.4 退出狀態246<br />9.13 總結246<br />練習246<br />拓展閱讀247<br />第二部分 C++庫和框架<br />第10章 測試250<br />10.1 &nbs測試250<br />10.1.1 集成測試250<br />10.1.2 驗收測試251<br />10.1.3 性能測試251<br />10.2 擴展示例:汽車制動服務251<br />10.2.1 實現AutoBrake253<br />10.2.2 測試驅動開發254<br />10.2.3 添加服務總線接口264<br />10.3 &nbs測試框架和模擬框架270<br />10.3.1 Cat測試框架270<br />10.3.2 Google Test276<br />10.3.3 Boost Test282<br />10.3.4 總結:測試框架287<br />10.4 模擬框架287<br />10.4.1 Google Mock289<br />10.4.2 HippoMocks296<br />10.4.3 其他模擬框架:FakeIt和<br /> Trompeloeil300<br />10.5 總結300<br />練習301<br />拓展閱讀302<br />第11章 智能指針303<br />11.1 智能指針概述303<br />11.2 智能指針所有權304<br />11.3 作用域指針304<br />11.3.1 構造304<br />11.3.2 引入Oath Breaker304<br />11.3.3 基於所有權的隱式布爾轉換305<br />11.3.4 RAII包裝器306<br />11.3.5 指針語義306<br />11.3.6 與nullptr比較307<br />11.3.7 交換307<br />11.3.8 重置和替換scoped_ptr308<br />11.3.9 不可轉移性309<br />11.3.10 boost::scoped_array309<br />11.3.11 支持的部分操作310<br />11.4 獨占指針310<br />11.4.1 構造311<br />11.4.2 支持的操作311<br />11.4.3 可轉移的專屬所有權311<br />11.4.4 獨占數組312<br />11.4.5 刪除器313<br />11.4.6 自定義刪除器和繫統編程313<br />11.4.7 支持的部分操作315<br />11.5 共享指針316<br />11.5.1 構造317<br />11.5.2 指定分配器317<br />11.5.3 支持的操作318<br />11.5.4 可轉移的非專屬所有權318<br />11.5.5 共享數組319<br />11.5.6 刪除器319<br />11.5.7 支持的部分操作319<br />11.6 弱指針321<br />11.6.1 構造321<br />11.6.2 獲得臨時所有權321<br />11.6.3 高級模式322<br />11.6.4 支持的操作322<br />11.7 侵入式指針323<br />11.8 可用的智能指針總結324<br />11.9 分配器325<br />11.10 總結327<br />練習327<br />拓展閱讀328<br />第12章 工具庫329<br />12.1 數據結構329<br />12.1.1 tribool329<br />12.1.2 optional332<br />12.1.3 pair334<br />12.1.4 tuple335<br />12.1.5 any337<br />12.1.6 variant338<br />12.2 日期和時間341<br />12.2.1 Boost DateTime341<br />12.2.2 Chrono345<br />12.3 數值350<br />12.3.1 數值函數350<br />12.3.2 復數351<br />12.3.3 數學常數352<br />12.3.4 隨機數354<br />12.3.5 數值極限357<br />12.3.6 Boost Numeric Conversion358<br />12.3.7 編譯時有理數算術360<br />12.4 總結361<br />練習362<br />拓展閱讀362<br />第13章 容器363<br />13.1 順序容器363<br />13.1.1 數組364<br />13.1.2 向量370<br />13.1.3 合適的順序容器377<br />13.2 關聯容器387<br />13.2.1 集合387<br />13.2.2 無序集合394<br />13.2.3 映射398<br />13.2.4 合適的關聯容器404<br />13.3 圖和屬性樹405<br />13.4 Boost圖庫405<br />13.5 Boost屬性樹406<br />13.6 initializer_list408<br />13.7 總結409<br />練習410<br />拓展閱讀411<br />第14章 迭代器412<br />14.1 迭代器類別412<br />14.1.1 輸出迭代器413<br />14.1.2 輸入迭代器415<br />14.1.3 前向迭代器416<br />14.1.4 雙向迭代器417<br />14.1.5 隨機訪問迭代器418<br />14.1.6 連續迭代器419<br />14.1.7 可變迭代器419<br />14.2 迭代器輔助函數420<br />14.2.1 std::advance420<br />14.2.2 std::next和std::prev421<br />14.2.3 std::distance422<br />14.2.4 std::iter_swap423<br />14.3 其他迭代器適配器424<br />14.3.1 移動迭代器適配器424<br />14.3.2 反向迭代器適配器425<br />14.4 總結426<br />練習426<br />拓展閱讀427<br />第15章 字符串428<br />15.1 std::string428<br />15.1.1 構造字符串429<br />15.1.2 字符串存儲和小字符串優化432<br />15.1.3 &nb素和迭代器訪問433<br />15.1.4 字符串比較434<br />15.1.5  素435<br />15.1.6 搜索440<br />15.1.7 數值轉換443<br />15.2 字符串視圖445<br />15.2.1 構造字符串視圖446<br />15.2.2 支持的string_view操作447<br />15.2.3 所有權、用法和效率447<br />15.3 正則表達式448<br />15.3.1 模式449<br />15.3.2 basic_regex450<br />15.3.3 算法451<br />15.4 Boost字符串算法454<br />15.4.1 Boost Range454<br />15.4.2 謂詞455<br />15.4.3 分類器456<br />15.4.4 查找器457<br />15.4.5 修改算法458<br />15.4.6 拆分和連接461<br />15.4.7 搜索463<br />15.5 Boost分詞器464<br />15.6 本地化465<br />15.7 總結465<br />練習465<br />拓展閱讀466<br />第16章 流467<br />16.1 流的基礎知識467<br />16.1.1 流類468<br />16.1.2 流狀態472<br />16.1.3 緩衝和刷新475<br />16.1.4 操縱符475<br />16.1.5 用戶自定義類型477<br />16.1.6 字符串流480<br />16.1.7 文件流483<br />16.1.8 流緩衝區487<br />16.1.9 隨機訪問489<br />16.2 總結490<br />練習490<br />拓展閱讀491<br />第17章 文件繫統492<br />17.1 文件繫統的相關概念492<br />17.2 std::filesystem::path493<br />17.2.1 構造路徑493<br />17.2.2 分解路徑493<br />17.2.3 修改路徑495<br />17.2.4 文件繫統路徑的方法496<br />17.3 文件和目錄497<br />17.3.1 錯誤處理497<br />17.3.2 構造路徑的函數498<br />17.3.3 檢查文件類型499<br />17.3.4 檢查文件和目錄501<br />17.3.5 操作文件和目錄502<br />17.4 目錄迭代器504<br />17.4.1 構造504<br />17.4.2 目錄條目505<br />17.4.3 遞歸目錄迭代507<br />17.5 fstream互操作509<br />17.6 總結510<br />練習510<br />拓展閱讀511<br />第18章 算法512<br />18.1 算法復雜度512<br />18.2 執行策略513<br />18.3 非修改序列操作514<br />18.3.1 all_of514<br />18.3.2 any_of515<br />18.3.3 none_of516<br />18.3.4 for_each517<br />18.3.5 for_each_n518<br />18.3.6 find、find_if和find_if_not519<br />18.3.7 find_end520<br />18.3.8 find_first_of521<br />18.3.9 adjacent_find522<br />18.3.10 count522<br />18.3.11 mismatch523<br />18.3.12 equal524<br />18.3.13 is_permutation525<br />18.3.14 search526<br />18.3.15 search_n527<br />18.4 可變序列操作528<br />18.4.1 copy528<br />18.4.2 copy_n529<br />18.4.3 copy_backward530<br />18.4.4 move530<br />18.4.5 move_backward531<br />18.4.6 swap_ranges532<br />18.4.7 transform533<br />18.4.8 replace534<br />18.4.9 fill536<br />18.4.10 generate537<br />18.4.11 remove538<br />18.4.12 unique539<br />18.4.13 reverse540<br />18.4.14 sample541<br />18.4.15 shuffle543<br />18.5 排序及相關操作544<br />18.5.1 sort545<br />18.5.2 stable_sort545<br />18.5.3 partial_sort547<br />18.5.4 is_sorted549<br />18.5.5 nth_element549<br />18.6 二分搜索550<br />18.6.1 lower_bound550<br />18.6.2 upper_bound551<br />18.6.3 equal_range552<br />18.6.4 binary_search553<br />18.7 分區算法553<br />18.7.1 is_partitioned554<br />18.7.2 partition554<br />18.7.3 partition_copy555<br />18.7.4 stable_partition556<br />18.8 合並算法557<br />18.9 極值算法558<br />18.9.1 min和max558<br />18.9.2 min_element和max_element559<br />18.9.3 clamp560<br />18.10 數值運算561<br />18.10.1 一些有用的運算符561<br />18.10.2 iota562<br />18.10.3 accumulate562<br />18.10.4 reduce563<br />18.10.5 inner_product564<br />18.10.6 adjacent_difference565<br />18.10.7 partial_sum566<br />18.10.8 其他算法566<br />18.11 Boost Algorithm庫568<br />拓展閱讀569<br />第19章 並發和並行570<br />19.1 並發編程570<br />19.1.1 異步任務571<br />19.1.2 共享和同步577<br />19.1.3 底層並發設施587<br />19.2 並行算法587<br />19.2.1 示例:並行排序588<br />19.2.2 並行算法不是魔法589<br />19.3 總結590<br />練習590<br />拓展閱讀590<br />第20章 用Boost Asio進行網絡<br /> 編程592<br />20.1 Boost Asio編程模型592<br />20.2 用Asio進行網絡編程594<br />20.2.1 IP協議族594<br />20.2.2 主機名解析596<br />20.2.3 連接598<br />20.2.4 緩衝區599<br />20.2.5 用緩衝區讀寫數據602<br />20.2.6 HTTP604<br />20.2.7 實現一個簡單的Boost Asio <br /> HTTP客戶端605<br />20.2.8 異步讀寫607<br />20.2.9 服務器610<br />20.3 多線程Boost Asio614<br />20.4 總結616<br />練習616<br />拓展閱讀616<br />第21章 編寫應用程序617<br />21.1 程序支持功能617<br />21.1.1 處理程序的終止和清理<br /> 工作619<br />21.1.2 與環境交互622<br />21.1.3 管理操作繫統的信號624<br />21.2 Boost ProgramOptions庫625<br />21.2.1 選項描述626<br />21.2.2 解析選項628<br />21.2.3 存儲和訪問選項629<br />21.2.4 整合在一起630<br />21.3 編譯中的特別話題632<br />21.3.1 重新審視預處理器632<br />21.3.2 編譯器優化635<br />21.3.3 與C語言鏈接635<br />21.4 總結636<br />練習636<br />拓展閱讀637<br /> 本書是為中高級程序員設計的,它深入介紹了現代C++的核心。本書分為兩大部分:第一部分介紹C++語言的核心,深入講解從類型和函數到對像生命周期和表達式的所有內容;第二部分介紹C++標準庫和Boost庫,深入講解所有可用的高質量、全功能的工具,涵蓋了特殊的工具類、數據結構和算法,並介紹了如何操作文件繫統和構建通過網絡進行通信的高性能程序。本書包含500多個代碼樣本和近100個練習,可以讓你打下堅實的C++基礎,助你寫出讓自己引以為傲的可讀性較高、短小精悍且高效的代碼。 ![](https://img10.360buyimg.com/imgzone/jfs/t1/147514/7/5440/73116/5f34a3beE3ba58783/f5b2391383f5625c.jpg)
" |