關(guān)于我們
書(shū)單推薦
新書(shū)推薦
|
C++ Primer英文版(第5版)
這本久負(fù)盛名的C++經(jīng)典教程,時(shí)隔八年之久,終迎來(lái)史無(wú)前例的重大升級(jí)。除令全球無(wú)數(shù)程序員從中受益,甚至為之迷醉的--C++大師Stanley B. Lippman的豐富實(shí)踐經(jīng)驗(yàn),C++標(biāo)準(zhǔn)委員會(huì)原負(fù)責(zé)人Josée Lajoie對(duì)C++標(biāo)準(zhǔn)的深入理解,以及C++先驅(qū)Barbara E. Moo在C++教學(xué)方面的真知灼見(jiàn)外,更是基于全新的C++11標(biāo)準(zhǔn)進(jìn)行了全面而徹底的內(nèi)容更新。非常難能可貴的是,書(shū)中所有示例均全部采用C++11標(biāo)準(zhǔn)改寫(xiě),這在經(jīng)典升級(jí)版中極其罕見(jiàn)--充分體現(xiàn)了C++語(yǔ)言的重大進(jìn)展極其全面實(shí)踐。書(shū)中豐富的教學(xué)輔助內(nèi)容、醒目的知識(shí)點(diǎn)提示,以及精心組織的編程示范,讓《C++ Primer英文版(第5版)》這本書(shū)在C++領(lǐng)域的權(quán)威地位更加不可動(dòng)搖。無(wú)論是初學(xué)者入門(mén),或是中、高級(jí)程序員提升,《C++ Primer英文版(第5版)》均為不容置疑的首選。
最新標(biāo)準(zhǔn)C++11發(fā)布,距上一版本已10年;《C++ Primer英文版(第5版)》是唯一持續(xù)更新的全球頂級(jí)C++讀本! 《辔簧铈诒娡拇髱熃M合堪稱(chēng)絕無(wú)僅有;經(jīng)過(guò)前四個(gè)版本積累,第5版的體例堪稱(chēng)完美! ∵@一版本作者歷時(shí)3年完成,極力避免在原版上升級(jí),而是將C++ 11的新特性真正融入各章節(jié);更將所有代碼示例用C++ 11的簡(jiǎn)化寫(xiě)法完成,而不是僅單獨(dú)增加內(nèi)容。
難以計(jì)數(shù)的程序員已經(jīng)通過(guò)舊版的C++ Primer 學(xué)會(huì)了C++語(yǔ)言。而在這段時(shí)間中,C++本身又已成熟了許多:語(yǔ)言本身的關(guān)注點(diǎn)和程序設(shè)計(jì)社區(qū)的關(guān)注點(diǎn)都已大大開(kāi)闊,已經(jīng)從主要關(guān)注機(jī)器效率轉(zhuǎn)變?yōu)楦嗟仃P(guān)注編程效率。
2011 年,C++標(biāo)準(zhǔn)委員會(huì)發(fā)布了ISO C++標(biāo)準(zhǔn)的一個(gè)重要修訂版。此修訂版是C++進(jìn)化過(guò)程中的最新一步,延續(xù)了前幾個(gè)版本對(duì)編程效率的強(qiáng)調(diào)。新標(biāo)準(zhǔn)的主要目標(biāo)是: · 使語(yǔ)言更為統(tǒng)一,更易于教學(xué) · 使標(biāo)準(zhǔn)庫(kù)更簡(jiǎn)單、安全、使用更高效 · 使編寫(xiě)高效率的抽象和庫(kù)變得更簡(jiǎn)單 因此,在這個(gè)版本的C++ Primer 中,我們進(jìn)行了徹底的修改,使用了最新的C++標(biāo)準(zhǔn)。為了了解新標(biāo)準(zhǔn)是如何全面影響C++語(yǔ)言的,你可以看一下xxiii 頁(yè)至xxv 頁(yè)的新特性列表,其中列出了哪些章節(jié)涉及了C++的新特性。 新標(biāo)準(zhǔn)增加的一些特性是具有普適性的,例如用于類(lèi)型推斷的auto。這些新特性使本書(shū)中的代碼更易于閱讀和理解。程序(以及程序員。┛梢院雎灶(lèi)型的細(xì)節(jié),從而更容易集中精力于程序邏輯上來(lái)。其他一些新特性,例如智能指針和允許移動(dòng)的容器,允許我們編寫(xiě)更為復(fù)雜的類(lèi),而又不必與錯(cuò)綜復(fù)雜的資源管理做斗爭(zhēng)。因此,在本書(shū)中開(kāi)始講授如何編寫(xiě)自己的類(lèi),會(huì)比第4 版簡(jiǎn)單得多。舊標(biāo)準(zhǔn)中阻擋在我們前進(jìn)路上的很多細(xì)節(jié),你我都不必再擔(dān)心了。 對(duì)于本書(shū)中涉及新標(biāo)準(zhǔn)定義的新特性的那些部分,我們都已用一個(gè)特殊的圖標(biāo)標(biāo)記出來(lái)了。我們希望這些提示標(biāo)記對(duì)那些已經(jīng)熟悉C++語(yǔ)言核心內(nèi)容的讀者是有幫助的,可以幫助他們決定將注意力投向哪里。對(duì)于那些可能尚不支持所有新特性的編譯器,我們還希望這些圖標(biāo)能有助于解釋這類(lèi)編譯器所給出的編譯錯(cuò)誤信息。這是因?yàn)殡m然本書(shū)中幾乎所有例子都已經(jīng)用最新版本的GNU 編譯器編譯通過(guò),但我們知道一些讀者可能尚未將編譯器更新到最新版本。雖然新標(biāo)準(zhǔn)增加了大量新功能,但核心C++語(yǔ)言并未變化,這構(gòu)成了本書(shū)的大部分內(nèi)容。讀者可以借助這些圖標(biāo)來(lái)判斷哪些功能可能還沒(méi)有被自己的編譯器所支持。 為什么選擇這本書(shū)? 現(xiàn)代C++語(yǔ)言可以看作是三部分組成的: · 低級(jí)語(yǔ)言,大部分繼承自 C 語(yǔ)言。 · 現(xiàn)代高級(jí)語(yǔ)言特性,允許我們定義自己的類(lèi)型以及組織大規(guī)模程序和系統(tǒng)。 · 標(biāo)準(zhǔn)庫(kù),它利用高級(jí)特性來(lái)提供有用的數(shù)據(jù)結(jié)構(gòu)和算法。 大多數(shù) C++教材按照語(yǔ)言進(jìn)化的順序來(lái)組織其內(nèi)容。首先講授C++的C 子集,然后將C++的更為抽象的一些特性作為高級(jí)話(huà)題在書(shū)的最后進(jìn)行介紹。這種方式存在兩個(gè)問(wèn)題:讀者會(huì)陷入那些繼承自低級(jí)程序設(shè)計(jì)的細(xì)節(jié),從而由于挫折感而放棄;讀者被強(qiáng)加學(xué)習(xí)一些壞習(xí)慣,隨后又需要忘記這些內(nèi)容。 我們采用一種相反的方法:從一開(kāi)始就介紹一些語(yǔ)言特性,能讓程序員忽略那些繼承自低級(jí)程序設(shè)計(jì)的細(xì)節(jié)。例如,在介紹和使用內(nèi)置的算術(shù)和數(shù)組類(lèi)型時(shí),我們還連同介紹和使用標(biāo)準(zhǔn)庫(kù)中的類(lèi)型string 和vector。使用這些類(lèi)型的程序更易寫(xiě)、易理解且更少出錯(cuò)。 太多時(shí)候,標(biāo)準(zhǔn)庫(kù)被當(dāng)作一種“高級(jí)”話(huà)題來(lái)講授。很多教材不使用標(biāo)準(zhǔn)庫(kù),而是使用基于字符數(shù)組指針和動(dòng)態(tài)內(nèi)存管理的低級(jí)程序設(shè)計(jì)技術(shù)。讓使用這種低級(jí)技術(shù)的程序正確運(yùn)行,要比編寫(xiě)相應(yīng)的使用標(biāo)準(zhǔn)庫(kù)的C++代碼困難得多。 貫穿 C++ Primer 全書(shū),我們都在強(qiáng)調(diào)好的風(fēng)格:我們想幫助讀者直接養(yǎng)成好的習(xí)慣,而不是在獲得很多很復(fù)雜的知識(shí)后再去忘掉那些壞習(xí)慣。我們特別強(qiáng)調(diào)那些棘手的問(wèn)題,并對(duì)常見(jiàn)的錯(cuò)誤想法和陷阱提出警告。 我們還注意解釋規(guī)則背后的基本原理--使讀者不僅知其然,還能知其所以然。我們相信,通過(guò)體會(huì)程序的工作原理,讀者會(huì)更快地鞏固對(duì)語(yǔ)言的理解。 雖然你不必為了學(xué)習(xí)本書(shū)而掌握 C 語(yǔ)言,但我們還是假定你了解足夠多的程序設(shè)計(jì)知識(shí),了解至少一門(mén)現(xiàn)代分程序結(jié)構(gòu)語(yǔ)言,知道如何用這門(mén)語(yǔ)言編寫(xiě)、編譯以及運(yùn)行程序。特別是,我們假定你已經(jīng)使用過(guò)變量,編寫(xiě)、調(diào)用過(guò)函數(shù),也使用過(guò)編譯器。 第 5 版變化的內(nèi)容 這一版C++ Primer 的新特點(diǎn)是用邊欄圖標(biāo)來(lái)幫助引導(dǎo)讀者。C++是一種龐大的編程語(yǔ)言,它提供了一些為特定程序設(shè)計(jì)問(wèn)題定制的功能。其中一些功能對(duì)大型項(xiàng)目團(tuán)隊(duì)有很重要的意義,但對(duì)于小型項(xiàng)目開(kāi)發(fā)可能并無(wú)必要。因此,并非每個(gè)程序員都需要了解每個(gè)語(yǔ)言特性的所有細(xì)節(jié)。我們加入這些邊欄圖標(biāo)來(lái)幫助讀者弄清哪些內(nèi)容可以隨后再學(xué)習(xí),而哪些主題是更為重要的。 對(duì)于包含C++語(yǔ)言基礎(chǔ)內(nèi)容的章節(jié),我們用一個(gè)小人正在讀書(shū)的圖標(biāo)加以標(biāo)記。用這個(gè)圖標(biāo)標(biāo)記的那些章節(jié),涵蓋了構(gòu)成語(yǔ)言核心部分的主題。每個(gè)人都應(yīng)該閱讀并理解這些章節(jié)的內(nèi)容。 對(duì)于那些涉及高級(jí)主題或特殊目的主題的章節(jié),我們也進(jìn)行了標(biāo)記。在首次閱讀時(shí),這些章節(jié)可以跳過(guò)或快速瀏覽。我們用一疊書(shū)的圖標(biāo)標(biāo)記這些章節(jié),指出在這些地方,你可以放心地放下書(shū)本?焖贋g覽這些章節(jié)可能是一個(gè)好主意,這樣你就可以知道有這些特性存在。但在真正需要在自己的程序中使用這些特性之前,沒(méi)有必要花費(fèi)時(shí)間仔細(xì)學(xué)習(xí)這些主題。 為了進(jìn)一步引導(dǎo)讀者的注意力,我們還用放大鏡圖標(biāo)標(biāo)記了特別復(fù)雜的概念。我們希望讀者對(duì)有這種標(biāo)記的章節(jié)能多花費(fèi)一些時(shí)間徹底理解其中的內(nèi)容。在這些章節(jié)中,至少有一些,其主題的重要性可能不是那么明顯;但我們認(rèn)為,你會(huì)發(fā)現(xiàn)這些章節(jié)涉及的主題對(duì)理解C++語(yǔ)言原來(lái)至關(guān)重要。 交叉引用的廣泛使用,是本書(shū)采用的另外一種閱讀幫助。我們希望這些引用能幫助讀者容易地翻閱書(shū)中的內(nèi)容,同時(shí)還能在后面的例子涉及到前面的內(nèi)容時(shí)容易地跳回到前面。 沒(méi)有改變的是,C++ Primer 仍是一本清晰、正確、全面的C++入門(mén)教材。我們通過(guò)給出一系列復(fù)雜度逐步增加的例子來(lái)講授這門(mén)語(yǔ)言,這些例子說(shuō)明了語(yǔ)言特性,展示了如何充分用好C++語(yǔ)言。 本書(shū)的結(jié)構(gòu) 我們首先在第I 部分和第II 部分中介紹了C++語(yǔ)言和標(biāo)準(zhǔn)庫(kù)的基礎(chǔ)內(nèi)容。這兩部分包含的內(nèi)容足夠你編寫(xiě)出有意義的程序,而不是只能寫(xiě)一些玩具程序。大部分程序員基本上都需要掌握本書(shū)這兩部分所包含的所有內(nèi)容。 除了講授 C++的基礎(chǔ)內(nèi)容,第I 部分和第II 部分還有另外一個(gè)重要目的:通過(guò)使用標(biāo)準(zhǔn)庫(kù)中定義的抽象設(shè)施,使你更加適應(yīng)高級(jí)程序設(shè)計(jì)技術(shù)。標(biāo)準(zhǔn)庫(kù)設(shè)施本身是一組抽象數(shù)據(jù)類(lèi)型,通常用C++編寫(xiě)。用來(lái)設(shè)計(jì)標(biāo)準(zhǔn)庫(kù)的,就是任何C++程序員都可以使用的用來(lái)構(gòu)造類(lèi)的那些語(yǔ)言特性。我們講授C++語(yǔ)言的一個(gè)經(jīng)驗(yàn)是,在先學(xué)習(xí)了使用設(shè)計(jì)良好的抽象類(lèi)型后,讀者會(huì)發(fā)現(xiàn)理解如何構(gòu)造自己的類(lèi)型更容易了。 只有在經(jīng)過(guò)全面的標(biāo)準(zhǔn)庫(kù)使用訓(xùn)練,并編寫(xiě)了各種標(biāo)準(zhǔn)庫(kù)所支持的抽象程序后,我們才真正進(jìn)入到那些允許你編寫(xiě)自己的抽象類(lèi)型的C++特性中去。本書(shū)的第III 部分和第IV 部分介紹了如何編寫(xiě)類(lèi)的形式的抽象類(lèi)型。第III 部分包含基礎(chǔ)內(nèi)容,第IV 部分介紹更專(zhuān)門(mén)的語(yǔ)言特性。 在第III 部分中,我們將介紹拷貝控制問(wèn)題,以及其他一些使類(lèi)能像內(nèi)置類(lèi)型一樣容易使用的技術(shù)。類(lèi)是面向?qū)ο缶幊毯头盒途幊痰幕A(chǔ),第III 部分也會(huì)介紹這些內(nèi)容。第IV 部分是C++ Primer 的結(jié)束部分,它介紹了一些在組織大型復(fù)雜系統(tǒng)時(shí)非常有用的語(yǔ)言特性。此外,我們將在附錄A 中總結(jié)標(biāo)準(zhǔn)庫(kù)算法。 讀者幫助 本書(shū)的每一章均以一個(gè)總結(jié)和一個(gè)術(shù)語(yǔ)表結(jié)束,兩者一起扼要回顧了這一章的大部分學(xué)習(xí)重點(diǎn)。讀者應(yīng)該將這些部分作為個(gè)人備忘錄:如果你不理解某個(gè)術(shù)語(yǔ),可以重新學(xué)習(xí)這一章的相應(yīng)部分。 在本書(shū)中我們還使用了其他一些學(xué)習(xí)輔助: · 重要的術(shù)語(yǔ)用加粗字體顯示;我們假定讀者已經(jīng)熟悉的重要術(shù)語(yǔ)用粗斜體顯示。每個(gè)術(shù)語(yǔ)都會(huì)列在章末尾的術(shù)語(yǔ)表中。 · 貫穿全書(shū),我們用高亮顯示來(lái)提醒讀者注意語(yǔ)言的重要部分,對(duì)常見(jiàn)的陷阱提出警告,建議好的程序設(shè)計(jì)習(xí)慣,以及提供一般性的使用提示。 · 為了更好地理解語(yǔ)言特性間和概念間的聯(lián)系,我們提供大量向前的和向后的交叉引用。 · 對(duì)重要的概念和 C++新程序員常常覺(jué)得最困難的主題,我們提供邊欄討論。 · 學(xué)習(xí)任何程序設(shè)計(jì)語(yǔ)言都需要編寫(xiě)程序。為此,貫穿全書(shū)我們提供大量程序示例。擴(kuò)展示例的源碼可從下面的網(wǎng)址獲得http://www.informit.com/title/0321714113 關(guān)于編譯器的注意事項(xiàng) 在撰寫(xiě)本書(shū)時(shí)(2012 年7 月),編譯器提供商正在努力工作,升級(jí)編譯器以匹配最新的ISO 標(biāo)準(zhǔn)。我們使用最多的編譯器是GNU 編譯器4.7.0。本書(shū)中只有一小部分特性在此編譯器中尚未實(shí)現(xiàn):繼承構(gòu)造函數(shù)、成員函數(shù)的引用限定符以及正則表達(dá)式庫(kù)。 致謝 我們要特別感謝標(biāo)準(zhǔn)委員會(huì)幾位現(xiàn)任和前任委員:Dave Abrahams、Andy Koenig、Stephan T. Lavavej、Jason Merrill、John Spicer 和Herb Sutter 在準(zhǔn)備本書(shū)的過(guò)程中提供的幫助。在理解新標(biāo)準(zhǔn)的一些更微妙之處,他們?yōu)槲覀兲峁┝藢氋F的幫助。我們還要感謝很多致力于升級(jí)GNU 編譯器以實(shí)現(xiàn)新標(biāo)準(zhǔn)的人們。 與舊版C++ Primer 中一樣,我們要感謝Bjarne Stroustrup 不知疲倦地為C++工作以及他和作者長(zhǎng)時(shí)間的友誼。我們還要感謝Alex Stepanov 的非凡洞察力,催生了標(biāo)準(zhǔn)庫(kù)核心的容器和算法。最后,我們要感謝C++標(biāo)準(zhǔn)委員會(huì)的所有委員,感謝他們這么多年來(lái)在凈化、精煉和改進(jìn)C++語(yǔ)言方面的辛苦工作。 我們衷心感謝審稿人:Marshall Clow、Jon Kalb、Nevin Liber、Dr. C. L. Tondo、Daveed Vandevoorde 和Steve Vinoski,他們建設(shè)性的意見(jiàn)幫助我們對(duì)全書(shū)做出了大大小小的改進(jìn)。 本書(shū)是用 Latex 及其發(fā)行版本中的很多包來(lái)進(jìn)行排版的,我們應(yīng)該感謝Latex社區(qū)成員創(chuàng)造出如此強(qiáng)大的排版工具。 最后,我們要感謝Addison-Wesley 公司的優(yōu)秀員工,他們指導(dǎo)了本書(shū)的整個(gè)出版過(guò)程:Peter Gordon,我們的編輯,他給了我們動(dòng)力再次修改C++ Primer;Kim Boedigheimer,保證了一切按計(jì)劃進(jìn)行;Barbara Wood,她在編輯過(guò)程中找到了大量編輯錯(cuò)誤;還有Elizabeth Ryan,很高興再次和她共同工作,她指導(dǎo)我們完成了整個(gè)設(shè)計(jì)和生產(chǎn)流程。
Stanley B. Lippman,目前是微軟公司 Visual C++ 團(tuán)隊(duì)的架構(gòu)師。他從1984年開(kāi)始在貝爾實(shí)驗(yàn)室與C++的設(shè)計(jì)者Bjarne Stroustrup一起從事C++的設(shè)計(jì)與開(kāi)發(fā)。他在迪士尼和夢(mèng)工廠(chǎng)從事動(dòng)畫(huà)制作,還擔(dān)任過(guò)JPL的高級(jí)顧問(wèn)。
Josée Lajoie,曾經(jīng)是IBM加拿大研究中心C/C++編譯器開(kāi)發(fā)團(tuán)隊(duì)的成員,在ISO C++標(biāo)準(zhǔn)委員會(huì)工作了7年,擔(dān)任過(guò)ISO核心語(yǔ)言工作組的主席和C++ Report雜志的專(zhuān)欄作家。 Barbara E. Moo,擁有25年軟件經(jīng)驗(yàn)的獨(dú)立咨詢(xún)顧問(wèn)。在A(yíng)T&T,她與Stroustrup、Lippman一起管理過(guò)復(fù)雜的C++開(kāi)發(fā)項(xiàng)目。
Preface xxiii
Chapter 1 Getting Started 1.1 Writing a Simple C++Program 1.1.1 Compiling and Executing Our Program 1.2 AFirstLookat Input/Output 1.3 AWordaboutComments 1.4 FlowofControl 1.4.1 The whileStatement 1.4.2 The forStatement 1.4.3 ReadinganUnknownNumberof Inputs 1.4.4 The ifStatement 1.5 IntroducingClasses 1.5.1 The Sales_itemClass 1.5.2 AFirstLookatMemberFunctions 1.6 TheBookstoreProgram ChapterSummary DefinedTerms Part I The Basics Chapter 2 Variables and Basic Types 2.1 PrimitiveBuilt-inTypes 2.1.1 ArithmeticTypes 2.1.2 TypeConversions 2.1.3 Literals 2.2 Variables 2.2.1 VariableDefinitions 2.2.2 VariableDeclarations andDefinitions 2.2.3 Identifiers 2.2.4 Scopeof aName 2.3 CompoundTypes 2.3.1 References 2.3.2 Pointers vii viii Contents 2.3.3 UnderstandingCompoundTypeDeclarations 2.4 constQualifier 2.4.1 References to const 2.4.2 Pointers and const 2.4.3 Top-Level const 2.4.4 constexprandConstantExpressions 2.5 DealingwithTypes 2.5.1 TypeAliases 2.5.2 The autoTypeSpecifier 2.5.3 The decltypeTypeSpecifier 2.6 DefiningOurOwnDataStructures 2.6.1 Defining the Sales_dataType 2.6.2 Using the Sales_dataClass 2.6.3 Writing Our Own Header Files ChapterSummary DefinedTerms Chapter 3 Strings, Vectors, and Arrays 3.1 Namespace usingDeclarations 3.2 Library stringType 3.2.1 Defining and Initializing strings 3.2.2 Operations on strings 3.2.3 Dealing with the Characters in a string 3.3 Library vectorType 3.3.1 Defining and Initializing vectors 3.3.2 Adding Elements to a vector 3.3.3 Other vectorOperations 3.4 IntroducingIterators 3.4.1 UsingIterators 3.4.2 IteratorArithmetic 3.5 Arrays 3.5.1 DefiningandInitializingBuilt-inArrays 3.5.2 AccessingtheElementsof anArray 3.5.3 Pointers andArrays 3.5.4 C-StyleCharacterStrings 3.5.5 InterfacingtoOlderCode 3.6 MultidimensionalArrays ChapterSummary DefinedTerms Chapter 4 Expressions 4.1 Fundamentals 4.1.1 BasicConcepts 4.1.2 PrecedenceandAssociativity 4.1.3 OrderofEvaluation 4.2 ArithmeticOperators 4.3 Logical andRelationalOperators Contents ix 4.4 AssignmentOperators 4.5 Increment andDecrementOperators 4.6 TheMemberAccessOperators 4.7 TheConditionalOperator 4.8 TheBitwiseOperators 4.9 The sizeofOperator 4.10 CommaOperator 4.11 TypeConversions 4.11.1 TheArithmeticConversions 4.11.2 Other ImplicitConversions 4.11.3 ExplicitConversions 4.12 OperatorPrecedenceTable ChapterSummary DefinedTerms Chapter 5 Statements 5.1 Simple Statements 5.2 StatementScope 5.3 Conditional Statements 5.3.1 The ifStatement 5.3.2 The switchStatement 5.4 IterativeStatements 5.4.1 The whileStatement 5.4.2 Traditional forStatement 5.4.3 Range forStatement 5.4.4 The do whileStatement 5.5 JumpStatements 5.5.1 The breakStatement 5.5.2 The continueStatement 5.5.3 The gotoStatement 5.6 tryBlocks andExceptionHandling 5.6.1 A throwExpression 5.6.2 The tryBlock 5.6.3 StandardExceptions ChapterSummary DefinedTerms Chapter 6 Functions 6.1 FunctionBasics 6.1.1 LocalObjects 6.1.2 FunctionDeclarations 6.1.3 SeparateCompilation 6.2 ArgumentPassing 6.2.1 PassingArgumentsbyValue 6.2.2 PassingArgumentsbyReference 6.2.3 constParametersandArguments 6.2.4 ArrayParameters x Contents 6.2.5 main:HandlingCommand-LineOptions 6.2.6 FunctionswithVaryingParameters 6.3 Return Types and the returnStatement 6.3.1 FunctionswithNoReturnValue 6.3.2 FunctionsThatReturnaValue 6.3.3 ReturningaPointer toanArray 6.4 OverloadedFunctions 6.4.1 OverloadingandScope 6.5 Features forSpecializedUses 6.5.1 DefaultArguments 6.5.2 Inline and constexprFunctions 6.5.3 Aids for Debugging 6.6 FunctionMatching 6.6.1 ArgumentTypeConversions 6.7 Pointers toFunctions ChapterSummary DefinedTerms Chapter 7 Classes 7.1 DefiningAbstractDataTypes 7.1.1 Designing the Sales_dataClass 7.1.2 Defining the Revised Sales_dataClass 7.1.3 DefiningNonmemberClass-RelatedFunctions 7.1.4 Constructors 7.1.5 Copy,Assignment, andDestruction 7.2 AccessControl andEncapsulation 7.2.1 Friends 7.3 AdditionalClassFeatures 7.3.1 ClassMembersRevisited 7.3.2 Functions That Return *this 7.3.3 ClassTypes 7.3.4 FriendshipRevisited 7.4 ClassScope 7.4.1 NameLookupandClassScope 7.5 ConstructorsRevisited 7.5.1 Constructor InitializerList 7.5.2 DelegatingConstructors 7.5.3 TheRoleof theDefaultConstructor 7.5.4 ImplicitClass-TypeConversions 7.5.5 AggregateClasses 7.5.6 LiteralClasses 7.6 staticClassMembers ChapterSummary DefinedTerms Contents xi Part II The C++ Library Chapter 8 The IO Library 8.1 The IOClasses 8.1.1 NoCopyorAssignfor IOObjects 8.1.2 ConditionStates 8.1.3 ManagingtheOutputBuffer 8.2 File Input and Output 8.2.1 Using File Stream Objects 8.2.2 File Modes 8.3 stringStreams 8.3.1 Using an istringstream 8.3.2 Using ostringstreams ChapterSummary DefinedTerms Chapter 9 Sequential Containers 9.1 Overviewof the SequentialContainers 9.2 ContainerLibraryOverview 9.2.1 Iterators 9.2.2 ContainerTypeMembers 9.2.3 begin and endMembers 9.2.4 DefiningandInitializingaContainer 9.2.5 Assignment and swap 9.2.6 ContainerSizeOperations 9.2.7 RelationalOperators 9.3 SequentialContainerOperations 9.3.1 AddingElements toaSequentialContainer 9.3.2 AccessingElements 9.3.3 ErasingElements 9.3.4 Specialized forward_listOperations 9.3.5 ResizingaContainer 9.3.6 ContainerOperationsMayInvalidateIterators 9.4 How a vectorGrows 9.5 Additional stringOperations 9.5.1 Other Ways to Construct strings 9.5.2 Other Ways to Change a string 9.5.3 stringSearchOperations 9.5.4 The compareFunctions 9.5.5 NumericConversions 9.6 ContainerAdaptors ChapterSummary DefinedTerms xii Contents Chapter 10 Generic Algorithms 10.1 Overview 10.2 AFirstLookat theAlgorithms 10.2.1 Read-OnlyAlgorithms 10.2.2 AlgorithmsThatWriteContainerElements 10.2.3 AlgorithmsThatReorderContainerElements 10.3 CustomizingOperations 10.3.1 PassingaFunctiontoanAlgorithm 10.3.2 LambdaExpressions 10.3.3 LambdaCapturesandReturns 10.3.4 BindingArguments 10.4 Revisiting Iterators 10.4.1 Insert Iterators 10.4.2 iostream Iterators 10.4.3 Reverse Iterators 10.5 StructureofGenericAlgorithms 10.5.1 TheFive IteratorCategories 10.5.2 AlgorithmParameterPatterns 10.5.3 AlgorithmNamingConventions 10.6 Container-SpecificAlgorithms ChapterSummary DefinedTerms Chapter 11 Associative Containers 11.1 UsinganAssociativeContainer 11.2 Overviewof theAssociativeContainers 11.2.1 DefininganAssociativeContainer 11.2.2 Requirements onKeyType 11.2.3 The pairType 11.3 Operations onAssociativeContainers 11.3.1 AssociativeContainer Iterators 11.3.2 AddingElements 11.3.3 ErasingElements 11.3.4 Subscripting a map 11.3.5 AccessingElements 11.3.6 AWordTransformationMap 11.4 TheUnorderedContainers ChapterSummary DefinedTerms Chapter 12 DynamicMemory 12.1 DynamicMemoryandSmartPointers 12.1.1 The shared_ptrClass 12.1.2 ManagingMemoryDirectly 12.1.3 Using shared_ptrs with new 12.1.4 SmartPointers andExceptions 12.1.5 unique_ptr Contents xiii 12.1.6 weak_ptr 12.2 DynamicArrays 12.2.1 newandArrays 12.2.2 The allocatorClass 12.3 UsingtheLibrary:AText-QueryProgram 12.3.1 Designof theQueryProgram 12.3.2 DefiningtheQueryProgramClasses ChapterSummary DefinedTerms Part III Tools for Class Authors Chapter 13 Copy Control 13.1 Copy,Assign, andDestroy 13.1.1 TheCopyConstructor 13.1.2 TheCopy-AssignmentOperator 13.1.3 TheDestructor 13.1.4 TheRuleofThree/Five 13.1.5 Using = default 13.1.6 PreventingCopies 13.2 CopyControl andResourceManagement 13.2.1 ClassesThatActLikeValues 13.2.2 DefiningClassesThatActLikePointers 13.3 Swap 13.4 ACopy-ControlExample 13.5 ClassesThatManageDynamicMemory 13.6 MovingObjects 13.6.1 RvalueReferences 13.6.2 MoveConstructor andMoveAssignment 13.6.3 RvalueReferencesandMemberFunctions ChapterSummary DefinedTerms Chapter 14 Overloaded Operations and Conversions 14.1 BasicConcepts 14.2 Input andOutputOperators 14.2.1 Overloading the Output Operator << 14.2.2 Overloading the Input Operator >> 14.3 Arithmetic andRelationalOperators 14.3.1 EqualityOperators 14.3.2 RelationalOperators 14.4 AssignmentOperators 14.5 SubscriptOperator 14.6 Increment andDecrementOperators 14.7 MemberAccessOperators 14.8 Function-CallOperator xiv Contents 14.8.1 LambdasAreFunctionObjects 14.8.2 Library-DefinedFunctionObjects 14.8.3 Callable Objects and function 14.9 Overloading,Conversions, andOperators 14.9.1 ConversionOperators 14.9.2 AvoidingAmbiguousConversions 14.9.3 FunctionMatchingandOverloadedOperators ChapterSummary DefinedTerms Chapter 15 Object-Oriented Programming 15.1 OOP:AnOverview 15.2 DefiningBaseandDerivedClasses 15.2.1 DefiningaBaseClass 15.2.2 DefiningaDerivedClass 15.2.3 Conversions andInheritance 15.3 VirtualFunctions 15.4 AbstractBaseClasses 15.5 AccessControl andInheritance 15.6 ClassScopeunder Inheritance 15.7 Constructors andCopyControl 15.7.1 VirtualDestructors 15.7.2 SynthesizedCopyControl andInheritance 15.7.3 Derived-ClassCopy-ControlMembers 15.7.4 InheritedConstructors 15.8 Containers andInheritance 15.8.1 Writing a BasketClass 15.9 TextQueriesRevisited 15.9.1 AnObject-OrientedSolution 15.9.2 The Query_base and QueryClasses 15.9.3 TheDerivedClasses 15.9.4 The evalFunctions ChapterSummary DefinedTerms Chapter 16 Templates and Generic Programming 16.1 DefiningaTemplate 16.1.1 FunctionTemplates 16.1.2 ClassTemplates 16.1.3 TemplateParameters 16.1.4 MemberTemplates 16.1.5 Controlling Instantiations 16.1.6 Efficiency and Flexibility 16.2 TemplateArgumentDeduction 16.2.1 Conversions andTemplateTypeParameters 16.2.2 Function-TemplateExplicitArguments 16.2.3 Trailing Return Types and Type Transformation Contents xv 16.2.4 FunctionPointers andArgumentDeduction 16.2.5 TemplateArgumentDeductionandReferences 16.2.6 Understanding std::move 16.2.7 Forwarding 16.3 OverloadingandTemplates 16.4 VariadicTemplates 16.4.1 WritingaVariadicFunctionTemplate 16.4.2 PackExpansion 16.4.3 ForwardingParameterPacks 16.5 Template Specializations ChapterSummary DefinedTerms Part IV Advanced Topics Chapter 17 Specialized Library Facilities 17.1 The tupleType 17.1.1 Defining and Initializing tuples 17.1.2 Using a tuple toReturnMultipleValues 17.2 The bitsetType 17.2.1 Defining and Initializing bitsets 17.2.2 Operations on bitsets 17.3 RegularExpressions 17.3.1 UsingtheRegularExpressionLibrary 17.3.2 TheMatchandRegex IteratorTypes 17.3.3 UsingSubexpressions 17.3.4 Using regex_replace 17.4 RandomNumbers 17.4.1 Random-NumberEngines andDistribution 17.4.2 OtherKinds ofDistributions 17.5 The IOLibraryRevisited 17.5.1 FormattedInput andOutput 17.5.2 UnformattedInput/OutputOperations 17.5.3 RandomAccess toaStream ChapterSummary DefinedTerms Chapter 18 Tools for Large Programs 18.1 ExceptionHandling 18.1.1 ThrowinganException 18.1.2 CatchinganException 18.1.3 Function tryBlocks andConstructors 18.1.4 The noexceptExceptionSpecification 18.1.5 ExceptionClassHierarchies 18.2 Namespaces 18.2.1 NamespaceDefinitions xvi Contents 18.2.2 UsingNamespaceMembers 18.2.3 Classes,Namespaces,andScope 18.2.4 OverloadingandNamespaces 18.3 Multiple andVirtual Inheritance 18.3.1 Multiple Inheritance 18.3.2 Conversions andMultipleBaseClasses 18.3.3 ClassScopeunderMultiple Inheritance 18.3.4 Virtual Inheritance 18.3.5 Constructors andVirtual Inheritance ChapterSummary DefinedTerms Chapter 19 Specialized Tools and Techniques 19.1 Controlling Memory Allocation 19.1.1 Overloading new and delete 19.1.2 Placement newExpressions 19.2 Run-TimeTypeIdentification 19.2.1 The dynamic_castOperator 19.2.2 The typeidOperator 19.2.3 UsingRTTI 19.2.4 The type_infoClass 19.3 Enumerations 19.4 Pointer toClassMember 19.4.1 Pointers toDataMembers 19.4.2 Pointers toMemberFunctions 19.4.3 UsingMemberFunctions asCallableObjects 19.5 NestedClasses 19.6 union:ASpace-SavingClass 19.7 LocalClasses 19.8 InherentlyNonportableFeatures 19.8.1 Bit-fields 19.8.2 volatileQualifier 19.8.3 Linkage Directives: extern “C” ChapterSummary DefinedTerms Appendix A The Library A.1 LibraryNames andHeaders A.2 ABriefTourof theAlgorithms A.2.1 Algorithms toFindanObject A.2.2 OtherRead-OnlyAlgorithms A.2.3 BinarySearchAlgorithms A.2.4 AlgorithmsThatWriteContainerElements A.2.5 PartitioningandSortingAlgorithms A.2.6 GeneralReorderingOperations A.2.7 PermutationAlgorithms A.2.8 SetAlgorithms forSortedSequences Contents xvii A.2.9 MinimumandMaximumValues A.2.10 NumericAlgorithms A.3 RandomNumbers A.3.1 RandomNumberDistributions A.3.2 RandomNumberEngines Index New Features in C++ 2.1.1 long longType 2.2.1 List Initialization 2.3.2 nullptrLiteral 2.4.4 constexprVariables 2.5.1 TypeAliasDeclarations 2.5.2 The autoTypeSpecifier 2.5.3 The decltypeTypeSpecifier 2.6.1 In-Class Initializers 3.2.2 Using auto or decltype forTypeAbbreviation 3.2.3 Range forStatement 3.3 Defining a vector of vectors 3.3.1 List Initialization for vectors 3.4.1 Container cbegin and cendFunctions 3.5.3 Library begin and endFunctions 3.6 Using auto or decltype to SimplifyDeclarations 4.2 RoundingRules forDivision 4.4 Assignment fromaBracedListofValues 4.9 sizeofAppliedtoaClassMember 5.4.3 Range forStatement 6.2.6 Library initializer_listClass 6.3.2 List InitializingaReturnValue 6.3.3 Declaring a Trailing Return Type 6.3.3 Using decltype to Simplify Return Type Declarations 6.5.2 constexprFunctions 7.1.4 Using = default toGenerateaDefaultConstructor 7.3.1 In-class Initializers forMembersofClassType 7.5.2 DelegatingConstructors 7.5.6 constexprConstructors 8.2.1 Using strings for File Names 9.1 The array and forward_listContainers 9.2.3 Container cbegin and cendFunctions 9.2.4 List InitializationforContainers 9.2.5 Container Nonmember swapFunctions 9.3.1 Return Type for Container insertMembers 9.3.1 Container emplaceMembers xix xx New Features in C++ 9.4 shrink_to_fit 9.5.5 Numeric Conversion Functions for strings 10.3.2 LambdaExpressions 10.3.3 Trailing Return Type in Lambda Expressions 10.3.4 The Library bindFunction 11.2.1 List Initializationof anAssociativeContainer 11.2.3 List Initializing pairReturnType 11.3.2 List Initialization of a pair 11.4 TheUnorderedContainers 12.1 SmartPointers 12.1.1 The shared_ptrClass 12.1.2 List InitializationofDynamicallyAllocatedObjects 12.1.2 autoandDynamicAllocation 12.1.5 The unique_ptrClass 12.1.6 The weak_ptrClass 12.2.1 Range for Doesn‘t Apply to Dynamically Allocated Arrays 12.2.1 List InitializationofDynamicallyAllocatedArrays 12.2.1 autoCan’tBeUsedtoAllocateanArray 12.2.2 allocator::constructCanUseanyConstructor 13.1.5 Using = default forCopy-ControlMembers 13.1.6 Using = delete toPreventCopyingClassObjects 13.5 MovingInsteadofCopyingClassObjects 13.6.1 RvalueReferences 13.6.1 The Library moveFunction 13.6.2 MoveConstructor andMoveAssignment 13.6.2 Move Constructors Usually Should Be noexcept 13.6.2 MoveIterators 13.6.3 ReferenceQualifiedMemberFunctions 14.8.3 The functionClassTemplate 14.9.1 explicitConversionOperators 15.2.2 overrideSpecifier forVirtualFunctions 15.2.2 Preventing Inheritance by Defining a Class as final 15.3 override and final Specifiers for Virtual Functions 15.7.2 DeletedCopyControl andInheritance 15.7.4 InheritedConstructors 16.1.2 DeclaringaTemplateTypeParameteras aFriend 16.1.2 TemplateTypeAliases 16.1.3 DefaultTemplateArguments forTemplateFunctions 16.1.5 ExplicitControlof Instantiation 16.2.3 Template Functions and Trailing Return Types 16.2.5 ReferenceCollapsingRules 16.2.6 static_cast fromanLvaluetoanRvalue 16.2.7 The Library forwardFunction 16.4 VariadicTemplates 16.4 The sizeof...Operator 16.4.3 VariadicTemplates andForwarding New Features in C++11 xxi 17.1 The Library TupleClassTemplate 17.2.2 New bitsetOperations 17.3 TheRegularExpressionLibrary 17.4 TheRandomNumberLibrary 17.5.1 Floating-Point FormatControl 18.1.4 The noexceptExceptionSpecifier 18.1.4 The noexceptOperator 18.2.1 InlineNamespaces 18.3.1 InheritedConstructors andMultiple Inheritance 19.3 Scoped enums 19.3 Specifying the Type Used to Hold an enum 19.3 Forward Declarations for enums 19.4.3 The Library mem_fnClassTemplate 19.6 UnionMembersofClassTypes
你還可能感興趣
我要評(píng)論
|