




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
歷史簡介
C語言之所以要起名為“C”,是取的“BCPL”的第二
個字母(第一個字母用來命名之前被發(fā)明的B語言)。
當(dāng)C語言發(fā)展到頂峰的時刻,出現(xiàn)了一個版本叫Cwith
Class,那遍C++最早的版本,在C語言中增加class
關(guān)鍵字和類,那個時候有很多版本的C都希望在C語言
中增加類的概念;后來C標(biāo)準(zhǔn)委員會決定為這個版本的
C起個新的名字,那個時候征集了很多種名字,最后采
納了其中一個人的意見,以C語言中的++運算符來體現(xiàn)
它是C語言的進步,故而叫C++,成立了C++標(biāo)準(zhǔn)委
員會。
美國AT&T貝爾實驗室的本賈尼?斯特勞斯特盧普
(BjarneStroustruu)博士在20世紀(jì)80年代初期發(fā)
明并實現(xiàn)了C++(最初這種語言被稱作“Cwith
1
Classes()o一開始C++是作為C語言的增強版出現(xiàn)
的,從給C語言增加類開始,不斷的增加新特性。虛函
數(shù)(virtualfunction)、運算符重載(operator
overloading)、多重繼承(multipleinheritance)、
模板(template)、異常(exception)、RTTI、命名
空間(namespace)逐漸被加入標(biāo)準(zhǔn)。1998年國際標(biāo)
準(zhǔn)組織(ISO)頒布了C++程序設(shè)計語言的國際標(biāo)準(zhǔn)
ISO/IEC1988-1998oC++是具有國際標(biāo)準(zhǔn)的編程語
宣,通常稱作ANSI/ISOC++。1998年是C++標(biāo)準(zhǔn)
委員會成立的第一年,以后每5年視實際需要更新一次
標(biāo)準(zhǔn),下一次標(biāo)準(zhǔn)更新原定是在2009年,目前我們一
般稱該標(biāo)準(zhǔn)C++0x,但是由于對于新特性的爭端激烈,
除了在TechnicalReport1(tr1)中的新增修改被基
本確定外,完整的標(biāo)準(zhǔn)還遙遙無期。況且遺憾的是,由
于C++語言過于復(fù)雜,以及經(jīng)歷了長年的演變,直到現(xiàn)
在(2010年)都沒有有一個編譯器完全符合這個標(biāo)準(zhǔn)。
據(jù)HerbSutter報告,C++Ox最終國際投票已于
周三(2011年8月10號)結(jié)束,所有國家都投出了贊
成票,C++Ox已經(jīng)毫無疑義地成為正式國際標(biāo)準(zhǔn)。雖然
接下來還需要數(shù)月時間出版發(fā)布,但標(biāo)準(zhǔn)本身已經(jīng)完全
正式成立了。
組成部分根據(jù)日fectiveC++第三版第一條款的描
述,現(xiàn)在C++由以下四個“子語言”組成:
1、C子語言。C++支持C語言的兒乎全部功能,
主要是C89的部分,在語法上與C語言僅有極微妙的差
別(如括號表達式的左右值性,具體請參考C++標(biāo)準(zhǔn)文
獻)。
2、面向?qū)ο蟮腃++語言。C++語言原本不具備面
向?qū)ο蟮脑O(shè)計功能,然而隨著面向?qū)ο缶幊痰母拍畹奶?/p>
出以及如Java等語言的發(fā)展成熟,C++語言也開發(fā)出
了支持面向?qū)ο蠊δ艿陌姹?
3、泛型編程語言。C++強大(但容易失控的)模
板功能使它能在編譯期完成許多工作,從而大大提高運
行期效率。
4、STL(C++標(biāo)準(zhǔn)模板庫,StandardTemplate
Library)oOSTL的不斷發(fā)展,它已經(jīng)逐漸成為C++
程序設(shè)計中不可或缺的部分,其效率可能比一般的
native代碼低些,但是其安全性與規(guī)范性使它大受歡迎。
此外,包含在TR1等中的C++Ox將實現(xiàn)的新功能
在開發(fā)和測試中。
語言發(fā)展
C++語言發(fā)展大概可以分為三個階段:
第一階段從80年代到1995年。這一階段C++語
言基本上是傳統(tǒng)類型上的面向?qū)ο笳Z言,并且憑借著接
近C語言的效率,在工業(yè)界使用的開發(fā)語言中占據(jù)了相
當(dāng)大份額;
第二階段從1995年到2000年,這一階段由于標(biāo)
準(zhǔn)模板庫(STL)和后來的Boost等程序庫的出現(xiàn),泛型
程序設(shè)計在C++中占據(jù)了越來越多的比重性。當(dāng)然,同
時由于Java、C#等語言的出現(xiàn)和硬件價格的大規(guī)模下
降,C++受到了一定的沖擊;
第三階段從2000年至今,由于以Lo區(qū)、MPL等程
序庫為代表的產(chǎn)生式編程和模板元編程的出現(xiàn),C++出
現(xiàn)了發(fā)展歷史上又一個新的高峰,這些新技術(shù)的出現(xiàn)以
及和原有技術(shù)的融合,使C++已經(jīng)成為當(dāng)今主流程序設(shè)
計語言中最復(fù)雜的一員。
入門書籍
C++是一種語言,僅僅是它的語法、特性、標(biāo)準(zhǔn)類
庫就已經(jīng)是一門非常高深的課程,所以在開始學(xué)習(xí)的時
候,必須先要打好基礎(chǔ)。在市面上有很多VisualC++
的書,雖然其中可能會花1-2章來介紹C++的基本特
性,但是那絕對不會讓你入門。因此,初學(xué)者學(xué)習(xí)C++
應(yīng)該選擇針對C++語言本身的書籍,而不能是針對
VisualC++>MFC或者WindowsAPI的。
學(xué)習(xí)C++應(yīng)該由易至難,循序漸進。以前經(jīng)常有人
說學(xué)習(xí)C++之前應(yīng)該學(xué)習(xí)C語言。事實上那不是必須的,
C++和c語言雖然有關(guān)系,但仍然是兩種不同的語言。
當(dāng)然,在學(xué)習(xí)C++之前學(xué)習(xí)過其他編程語言是很有好處
的。那會使學(xué)習(xí)C++的速度更快,畢竟很多計算機語言
的概念都是相通的。而對于零基礎(chǔ)的初學(xué)者來說,則是
應(yīng)該靜下心來,不要急躁。要成為C++的高手,不是那
么容易的,必須要花很大的努力。
從入門教材的選擇上,主要看學(xué)習(xí)者的自身情況。
如果已經(jīng)有過學(xué)習(xí)高級語言的經(jīng)歷,那么推薦使用譚浩
強的《C++程序設(shè)計》。注意是04年版的,06年版的
那本書是閹割版,上來就面向?qū)ο?。雖然說C和C++是
相似的,但是前面已經(jīng)說了,C和C++應(yīng)該作為兩種語
言來學(xué)習(xí),所以06年的那本內(nèi)容就稍微欠缺一點了。譚
浩強04版的這本書內(nèi)容比較規(guī)整的,條理也很清晰。如
果有過其他高級語言的基礎(chǔ),那么估計半年就能對C++
的概況有個了解了。譚浩強老師的書已經(jīng)成為了全國各
大高等院校的教科書,是比較受到認(rèn)可的。
如果是從零基礎(chǔ)開始學(xué)C++,那么推薦使用潘嘉杰
的《易學(xué)C++》。這本書是2008年出的新書,聽說是
個學(xué)生在讀書的時候?qū)懙摹_@本書網(wǎng)上有下載免費的電
子版。這本書主要就是針對初學(xué)者的,講得也比較生動
有趣,比較提得起學(xué)習(xí)的興趣。所以沒有基礎(chǔ)的初學(xué)者
選這本書也是不錯的,就是想要很快成為高手,可能看
這本書還不夠。
至于看完入門的書之后,就應(yīng)該看一些高層次的書
To比如vvTheC++ProgrammingLanguage>>
和vvC++Primer>>,同時也可以向STL、MFC、API
等各個方向發(fā)展。如果對別的語言感興趣,還能去看看
C#和Java,它們和C++從語法和很多概念上都是類似
的。
設(shè)計原則
?C++設(shè)計成靜態(tài)類型、和C同樣高效且可移植的
多用途程序設(shè)計語言。
-C++設(shè)計成直接的和廣泛的支援多種程序設(shè)計風(fēng)
&(程序化程序設(shè)計、資料抽象化、面向?qū)ο蟪绦蛟O(shè)計、
泛型程序設(shè)計)。
?C++設(shè)計成給程序設(shè)計者更多的選擇,即使可能
導(dǎo)致程序設(shè)計者選擇錯誤。
-C++設(shè)計成盡可能與C兼容,籍此提供一個從C
到C++的平滑過渡。
-C++避免平臺限定或沒有普遍用途的特性。
-C++不使用會帶來額外開銷的特性。
-C++設(shè)計成無需復(fù)雜的程序設(shè)計環(huán)境。
出于保證語言的簡潔和運行高效等方面的考慮,
C++的很多特性都是以庫(如STL)或其他的形式提供
的,而沒有直接添加到語言本身里。關(guān)于此類話題,C++
之父的《C++語言的設(shè)計和演化》里做了詳盡的陳述。
HelloWorld程序
在使用兼容C89標(biāo)準(zhǔn)(也稱為ANSIC)的編譯器時,下
面這個程序顯示“Hello,world!”然后結(jié)束運行:
(事實上這并不是符合98標(biāo)準(zhǔn)[ISOC++]的C++程序,
而且在多數(shù)編譯器上這個程序也不能運行,若要在比較舊
的編譯器上編譯該程序,應(yīng)將stdio.h改為iostream.h)
#include<stdio.h>
intmain()
(
printf("Hello,world!\n");
return0;
)
(以上是C語言代碼,C++語言是c語言高一級的版本)
在使用兼容C++98標(biāo)準(zhǔn)(ISO/1EC14882-1998)的
編譯器時,下面的程序也是可以的:
#include<iostream.h>
intmain()
cout<<"Hello,world!"<<endl;
return0;
在使用兼容C++STL的編譯器時,應(yīng)當(dāng)是:
#include<iostream>
usingnamespacestd;
intmain()
(
cout<<"Hello,world!"<<endl;
return0;
)
根據(jù)ISOC++的規(guī)定,main函數(shù)的形式只能是
intmain(void)
(
)
以及
intmain(intargc,char*argv[])
(
)
盡管如此,但在VisualC++2003以前的MicrosoftV
isualStudio編譯器上,
voidmain()
也被支持,但這并不正確,也不標(biāo)準(zhǔn)。這樣的寫法會使程
序代碼喪失跨平臺的特性。每年都有專業(yè)人士規(guī)定C++
的語法,這也是C++優(yōu)于其他編程語言的原因之一,由它
衍生的Java已成為通用編程語言中廣受歡迎的一種。
代碼性能
一般認(rèn)為,使用Java或C#的開發(fā)成本比C++低。
但是,如果你能夠充分分析C++和這些語言的差別,會
發(fā)現(xiàn)這句話的成立是有條件的。這個條件就是:軟件規(guī)
模和復(fù)雜度都比較小。如果不超過3萬行有效代碼(不
包括生成器產(chǎn)生的代碼),這句話基本上還能成立。否
則,隨著代碼量和復(fù)雜度的增加,C++的優(yōu)勢將會越來
越明顯。造成這種差別的就是C++的軟件工程性。在
Java和C#大談軟件工程的時候,C++實際上已經(jīng)悄悄
地將軟件工程性提升到一個前所未有的高度。這一點被
多數(shù)人忽視,并且被大公司竭力掩蓋。
語言在軟件工程上的好壞,依賴于語言的抽象能力。
從面向過程到面向?qū)ο?,語言的抽象能力有了一個質(zhì)的
飛躍。但在實踐中,人們發(fā)現(xiàn)面向?qū)ο鬅o法解決所有軟
件工程中的問題。于是,精英們逐步引入、并拓展泛型
編程,解決更高層次的軟件工程問題。(實際上,面向
對象和泛型編程的起源都可以追溯到1967年,但由于
泛型編程更抽象,所以應(yīng)用遠(yuǎn)遠(yuǎn)落后于面向?qū)ο螅?/p>
應(yīng)用實例
哪些程序是用C++寫的:
主流的3種操作系統(tǒng)Windows內(nèi)核都是用C語言
和匯編寫的,上層高級特性是用C++寫的。
《魔獸世界》等幾乎所有的網(wǎng)絡(luò)游戲,百度搜索引
擎,我們所用的大多數(shù)軟件都是用C++寫的(硬件也有
很多用到C++的)。
以下是一些C++的應(yīng)用:
Amazon:Softwareforlarge-scale
e-commerce
Apple:OSXiswritteninamixoflanguage,
butafewimportantpartsareC++(當(dāng)然最核心的
部分都是匯編與c語言).
AT&T:ThelargestUStelecommunications
provider.
oprovisioningsystems
osystemsforrapidnetworkrecoveryafter
failure
Autodesk:Alargenumberofmajornumber
ofapplicationintheCADdomain
Ericsson:
oserverplatform.
oTDMA-CDMAHLR
oGSM-TDMA-CDMAmobilitygateway
GoogIe:websearchengine,etc。
HP:HereisatinyfractionofHP'sC++apps:
oC,C++,Fortran90compilers,andlinkerfor
thenewHPIA64platform(theseaddtomore
than1millionlinesofC++code).
IBM:
oOS/400.
oK42:ahighperformance,opensource,
general-purposeoperatingsystemkernelfor
cache-coherentmuniprocessors.
Intel:
oVtuneperformaceanalysissoftware
ocompilersandoptimizers
olotsofchipdesignandmanufacturing
software
JPL(JetPropulsionLab,NASA):Marsrover
autonomousdrivingsystem(incl.sceneanalysis
androuteplanning).C++onMars!Alsolotsof
supportingsoftware"ontheground"(i.e.Earth).
Microsoft:
oWindowsXP
oWindowsNT(NT4and2000)
oWindows9x(95,98,Me)
oMicrosoftOffice(Word,Excel,Access,
PowerPoint,Outlook)
oInternetExplorer(includingOutlook
Express)
oVisualStudio
oSQL
Mozilla:FirefoxbrowserandThunderbird
mailclient(opensource)
MySQL:MySQLServer(about250,000lines
ofC++)andMySQLCluster.Arguablytheworld's
mostpopularopensourcedatabase
Nokia:
oMobileCommunications
radio-station/internetbridges:FlexiGGSN
(GatewayGPRSSupportNode)andFlexiSGSN
(ServerGPRSSupportNode).
oMSC/HLR
Sun:oTheHotSpotJavaVirtualMachineis
writteninC++
SymbianOS:rationale:usingC++for
allsystemcode,fromthekernelupwards."This
isoneofthemostwidespreadOS'sforcellular
phones
KDEfromlinuxiswritteninC++.
telephonesystems:Ithinkitwouldbe
almosteasiertolistthesystemswhicharen't
writteninC++
C++寫出的軟件,還包括
VLC,著名的開源視頻播放器;
LAMMPS,著名分子動力學(xué)模擬軟件,其中包括一
部分Fortran代碼;
編程技巧
使用new和delete進行動態(tài)內(nèi)存分配和釋放
運算符new和delete是C++新增的運算符,提供
了存儲的動態(tài)分配和釋放功能。它的作用相當(dāng)于C語言
的函數(shù)malloc()和free(),但是性能更為優(yōu)越。使
用new較之使用malloc()有以下的兒個優(yōu)點:
(1)new自動計算要分配類型的大小,不使用sizeof
運算符,比較省事,可以避免錯誤。
(2)自動地返回正確的指針類型,不用進行強制指
針類型轉(zhuǎn)換。
(3)可以用new對分配的對象進行初始化。
使用例子:
(1)int*p;
p=newint[1O];〃分配一個含有10個整數(shù)的整
型數(shù)組
delete[]p;〃釋放這個指向數(shù)組的指針?biāo)純?nèi)存
(2)int*p;
p=newint(100);//動態(tài)分配一個整數(shù)并初始化
使用inline內(nèi)聯(lián)函數(shù)替代宏調(diào)用
對于頻繁使用的函數(shù),C語言建議使用宏調(diào)用代替
函數(shù)調(diào)用以加快代碼執(zhí)行,減少調(diào)用開銷。但是宏調(diào)用
有許多的弊端,可能引起不期望的副作用。例如宏:
#defineabs(a)(a)<0?(-a):(a)),當(dāng)使用abs(i++)
時,這個宏就會出錯。
所以在C++中應(yīng)該使用inline內(nèi)聯(lián)函數(shù)替代宏調(diào)
用,這樣既可達到宏調(diào)用的目的,又避免了宏調(diào)用的弊
上山
”而。
使用內(nèi)聯(lián)函數(shù)只須把inline關(guān)鍵字放在函數(shù)返回類
型的前面。例如:
inlineintAdd(inta,intb);〃聲明Add()為內(nèi)聯(lián)
函數(shù)
這樣編譯器在遇到Add()函數(shù)時,就不再進行函數(shù)
調(diào)用,而是直接嵌入函數(shù)代碼以加快程序的執(zhí)行。
使用函數(shù)重載
在C語言中,兩個函數(shù)的名稱不能相同,否則會導(dǎo)
致編譯錯誤。而在C++中,函數(shù)名相同而參數(shù)數(shù)據(jù)類型
不同的兩個函數(shù)被解釋為重載。例如:
voidPutHz(char*str);〃在當(dāng)前位置輸出漢字
voidPutHz(intx,?inty,?char*str);//在x,y
處輸入數(shù)字
使用函數(shù)重載可以幫助程序員處理更多的復(fù)雜問
題,避免了使用諸如intabs()、fabs()>dabs()等繁雜
的函數(shù)名稱;同時在大型程序中,使函數(shù)名易于管理和
使用,而不必絞盡腦汁地去處理函數(shù)名。同時必須注意,
參數(shù)數(shù)據(jù)類型相同,但是函數(shù)返回類型不同的兩個函數(shù)
不能重載。
用引用(reference)代替指針進行參數(shù)傳遞
在C語言中,如果一個函數(shù)需要修改用作參數(shù)的變
量值的時候,參數(shù)應(yīng)該聲明為指針類型。例如:
voidAdd(int*a)
(
(*a)++;
)
調(diào)用時則使用
Add(&x);//其中x為int或可以轉(zhuǎn)化為int的類型,
如unsignedint,但這時候編譯器通常會給出warning
對于復(fù)雜的程序,使用指針容易出錯,程序也難以
讀懂。在C++中,對于上述情況可以使用引用來代替
指針,使程序更加清晰易懂。引用就是對變量取的一個
別名,對引用進行操作,這就相當(dāng)于對原有變量進行操
作。例如使用引用的函數(shù)定義為:
voidAdd(int&a)
(
a++;//a為一個整數(shù)的引用
)
調(diào)用時使用
Add(x);//其中x為int
這個函數(shù)與使用指針的上一個函數(shù)的功能是一樣
的,然而代碼卻更為簡潔和清晰易懂。
使用缺省參數(shù)
在C++中函數(shù)可以使用缺省參數(shù),例如:
voidPutHzxy(char*str,intx=-1,inty=-1)
(
if(x==-1)
x=wherex();
if(y==-1)
x=wherex();
moveto(x,y);
PutHx(str);
}
可以有三種方式調(diào)用函數(shù)PutHzxy(),例如:
PutHzxy("C++語言)//使用缺省參數(shù),在當(dāng)前位
置輸出
PutHzxy("C++語言”,10,10);〃沒有使用缺省參
數(shù)
PutHzxy("C++語言”,10);〃對v使用缺省參數(shù),
指定x的位置
通常的情況下,一個函數(shù)應(yīng)該具有盡可能大的靈活
性。使用缺省參數(shù)為程序員處理更大的復(fù)雜性和靈活性
問題提供了有效的方法,所以在C++的代碼中都大量地
使用了缺省參數(shù)。
需要說明的是,所有的缺省參數(shù)必須出現(xiàn)在不缺省
參數(shù)的右邊。亦即,一旦開始定義缺省參數(shù),就不可再
說明非缺省的參數(shù)。否則當(dāng)你省略其中一個參數(shù)的時候,
編譯器無法知道你是自定義了這個參數(shù)還是利用了缺省
參數(shù)而定義了非缺省的參數(shù)。
例如:
voidPutHzxy(char*strjntx=-1,inty=-1)〃正
確
voidPutHzxy(intx=-1,inty=-1,char*str)〃錯
誤
使用STL
STL(StandardTemplateLibrary,標(biāo)準(zhǔn)模板庫),
STL的代碼從廣義上講分為三類:algorithm(算法)、
container?(容器)和iterator(迭代器),并包括一些
工具類如aut。Dtr。幾乎所有的代碼都采用了模板類和
模版函數(shù)的方式,這相比于傳統(tǒng)的由函數(shù)和類組成的庫
來說提供了更好的代碼重用機會。
#include<vector>//包含相關(guān)的頭文件/
typedefstd::vector<int>intvector;〃使用
typedef使代碼看起來更簡潔
intmain()
(
intvectorvi;
for(inti=0;i<10,i++)
vi.pushback(i)://使用push_back添加元素
for(inti=0;i<vi.size();i++)
std::coutvvvi[i]vv"";//[]操作符被重載,使得
我們可以像訪問數(shù)組一樣訪問vector中的元素
)
開發(fā)方式
在unix世界有大量的程序員是傳統(tǒng)的非IDE的方
式進行軟件開發(fā)。一般是如下組合:
1.編譯器:gcc,clang等
2.編輯器:一般是vim/emacs
3.make:gnumake或者bsd的pmake等,功
能與用法基本一樣
4.版本管理:cvs,svn,git等
5.代碼閱讀:cscope,ctags,lxr■等
開發(fā)環(huán)境
1.VisualStudio(VisualC++)
2.BorlandC++Builder
3.Eclipse(Myln+CDT+Mingw32+GCC)
4.Dev-C++(Mingw32+GCC)
5.Code::Blocks(可配合多款編譯核心使用)
6.Codelite
7.C-Free
如上所示,目前流行的GNUGCC和微軟的Visual
Studio系列各執(zhí)一套基本的編譯鏈,其他的IDE都是衍
生產(chǎn)品
經(jīng)典著作
?《TheC++StandardLibrary:ATutorial
andReferenced
中文版:《C++標(biāo)準(zhǔn)程序庫:自修教程與參考手冊》
百科全書式的C++標(biāo)準(zhǔn)庫著作,一本需要一再查閱
的參考大全。本書詳細(xì)介紹了每一標(biāo)準(zhǔn)庫組件的規(guī)格和
用法,內(nèi)容涵蓋包括流和本地化在內(nèi)的整個標(biāo)準(zhǔn)庫而不
僅僅是STL。正如本書副標(biāo)題所示,它首先適合作為教
程閱讀,爾后又可用作參考手冊。淺顯易懂的寫作風(fēng)格
使得這本書非常易讀。
?《StandardC++IOStreamsandLocales:
AdvancedProgrammer'sGuideand
Referenced
中文版《標(biāo)準(zhǔn)C++輸入輸出流與本地化》
?E《ffectiveSTL^
使用STL的程序員必讀之作。在這本書中,Scott
講述了STL容器和算法的工作機制以及如何以最佳方式
使用它們。和Scott的其他作品一樣,這本書的寫作風(fēng)
格清晰、精確,具有極佳的可讀性。
?影印版《GenericProgrammingandthe
STL:UsingandExtendingtheC++Standard
TemplateLibrary》
中文版《泛型編程與STL?
這本書散發(fā)著濃厚的學(xué)院氣息。AndrewKoenig和
BarbaraMoo在^AcceleratedC++:Practical
ProgrammingbyExampie》一書末尾鄭重推薦另
外兩本進階好書(除了他們自己的《Ruminationson
C++》外),其中一本是TCPL,另外一本就是本書。
?DouglasC.Schmidt,StephenD.Huston,
《C++NetworkProgramming》
Volume1:MasteringComplexitywithACE
andPatterns;
Volume2:SystematicReusewithACEand
Frameworks;
中文版:,《C++網(wǎng)絡(luò)編程》
卷1:運用ACE和模式消除復(fù)雜性
卷2:基于ACE和框架的系統(tǒng)化復(fù)用
采用C++進行企業(yè)級網(wǎng)絡(luò)編程,ACE(Adaptive
CommunicationsEnvironment)是一個值得考慮的
選擇,ACE是一個面向?qū)ο?、跨平臺、開放源碼的網(wǎng)絡(luò)
編程框架,目標(biāo)在于構(gòu)建高性能網(wǎng)絡(luò)應(yīng)用和中間件。
Douglas是ACE的創(chuàng)始人,Stephen貝已為ACE
提供了數(shù)年的技術(shù)支持和顧問服務(wù),兩位都是ACE社群
(是的,ACE的影響和實際應(yīng)用的程度已經(jīng)形成了一個
社群)的專家。
除了使用C++面向?qū)ο笤O(shè)計技術(shù)和模板等高級語
言特性外,ACE還運用了大量的模式。《C++網(wǎng)絡(luò)編程》
卷1和卷2并不僅僅教你關(guān)于ACE的方方面面,它還會
教給你模式和通用框架設(shè)計等高級技術(shù)等。
并非所有網(wǎng)絡(luò)應(yīng)用都要使用Web服務(wù)器(以及其他
應(yīng)用服務(wù)器)和重量級組件模型,換個思路,它們或許
也可以從輕量級的ACE組件中獲益。
?BruceEckel,{ThinkinginC++》影印版二版、
三版(又名卷二)
中文《C++編程思想》二版
卷一:標(biāo)準(zhǔn)C++導(dǎo)引
卷二:實用編程技術(shù)
《ThinkinginC++》的第1版于1996年榮獲“軟
件研發(fā)”雜志評選的圖書震撼大獎。第2版對內(nèi)容進行了
大幅改寫和調(diào)整,以反映C++標(biāo)準(zhǔn)化帶來的影響以及當(dāng)
時面向?qū)ο箢I(lǐng)域最新研究和實踐成果。
“輸入輸入流”、“多重繼承”、“異常處理”和“運行時
類型識別'等高級主題連同C++標(biāo)準(zhǔn)化以后增加的一些
內(nèi)容則被放入第二卷中。
事實上,在同類圖書中,對于大多數(shù)讀者而言,這
本書的可讀性要超過TCPL和《C++Primer》。
順帶一提,訪問作者的站點,你可以先睹第二卷的
風(fēng)米。
?AndrewKoenig,BarbaraE.Moo,
m/nationsonC++:ADecadeof
ProgrammingInsightandExperienced
中文版《C++沉思錄》
一本關(guān)于C++編程思想和程序設(shè)計技術(shù)而非語言
細(xì)節(jié)的著作。
Bjarne這樣評價這本書:本書遍布“C++是什
么?C++能夠做什么?”的真知灼見。
?StanleyB.Lippman,影印版《InsideThe
C++ObjectModell
中文版《深度探索C++對象模型》
從編譯器的角度觀察C++。本書探討了大量的C++
面向?qū)ο蟪绦蛟O(shè)計的底層運作機制,包括構(gòu)造函數(shù)、函
數(shù)、臨時對象、繼承、虛擬、模板的實例化、異常處理、
運行期類型識別等,另外還介紹了一些在實現(xiàn)C++對象
模型過程中做出的權(quán)衡折衷。
?ErichGamma,RichardHelm,RalphJohnson,
JohnVlissides,《DesignPatterns:Elementsof
ReusableObject-Orientedsoftware^
中文版《設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》
本書并非專為C++程序員而寫,但它采用了C++
(以及Smalltalk)作為主要示例語言,C++程序員尤
其易于從中受益。
?JohnLakos,^Large-ScaleC++Software
Design》
中文版《大規(guī)模C++程序設(shè)計》
?候捷:《STL源碼剖析》
《STL源碼剖析》是一本很有特色的書。遺憾的是,
侯捷先生在完成化++Templates:TheComplete
Guide》一書的翻譯后似乎決定暫時告別模板、泛型編
程和STL領(lǐng)域。
?《TheC++Standard:Incorporating
TechnicalCorrigendumNo.7)
?C++面向?qū)ο蟪绦蛟O(shè)計{悴者:Wa\terSavitch)
這本書是老外出的書,從基礎(chǔ)到深入,很容從C過渡到
C++
?C++Primer中文版(第4版)(一本久負(fù)盛名
的C++經(jīng)典教程)
常見錯誤
Ambiguousoperatorsneedparentheses
------不明確的運算需要用括號括起
Ambiguoussymbol"xxx"--------------------不明
確的符號
Argumentlistsyntaxerror------------------參
數(shù)表語法錯誤
Arrayboundsmissing----------------------丟失數(shù)
組界限符
Arraysizetoolarge--------------------數(shù)組尺寸太
大
Badcharacterinparamenters
----------------參數(shù)中有不適當(dāng)?shù)淖址?/p>
Badfilenameformatinincludedirective
------------------包含命令中文件名格式不正確
Badifdefdirectivesynatax
----------------------------編譯預(yù)處理ifdef有語法
錯
Badundefdirectivesyntax
-------------------------編譯預(yù)處理undef有語法錯
Bitfieldtoolarge--------------------位字段太長
Callofnon-function---------------------調(diào)用未定
義的函數(shù)
Calltofunctionwithnoprototype
--------------調(diào)用函數(shù)時沒有函數(shù)的說明
Cannotmodifyaconstobject------------------
不允許修改常量對象
Caseoutsideofswitch--------------------漏掉了
case語句
Casesyntaxerror----------------------Case語法
錯誤
Codehasnoeffect--------------------代碼不可述
不可能執(zhí)行到
Compoundstatement
missing{-------------------------分程序漏掉”{“
Conflictingtypemodifiers----------------------不
明確的類型說明符
Constantexpressionrequired--------------------
要求常量表達式
Constantoutofrangeincomparison
---------------在比較中常量超出范圍
Conversionmaylosesignificantdigits
---------------轉(zhuǎn)換時會丟失意義的數(shù)字
Conversionofnearpointernotallowed
---------------不允許轉(zhuǎn)換近指針
Couldnotfindfile"xxx"---------------------------
找不到XXX文件
Declarationmissing;-------------------說明缺少
VI”
*
Declarationsyntaxerror--------------------說明
中出現(xiàn)語法錯誤
Defaultoutsideofswitch---------------------
Default出現(xiàn)在switch語句之外
Definedirectiveneedsanidentifier
----------------定義編譯預(yù)處理需要標(biāo)識符
Divisionbyzero---------------------用零作除數(shù)
Dostatementmusthavewhile
---------------------Do-while語句中缺少while部分
Enumsyntaxerror-------------------------枚舉類
型語法錯誤
Enumerationconstantsyntaxerror
---------------枚舉常數(shù)語法錯誤
Errordirective:xxx------------------------------錯
誤的編譯預(yù)處理命令
Errorwritingoutputfile--------------------------
寫輸出文件錯誤
Expressionsyntaxerror
---------------------表達式語法錯誤
Extraparameterincall-----------------------------
調(diào)用時出現(xiàn)多余錯誤
Filenametoolong--------------------文件名太長
Functioncallmissing---------------------函數(shù)調(diào)用
缺少右括號
Fuctiondefinitionoutofplace
----------------函數(shù)定義位置錯誤
Fuctionshouldreturnavalue
----------------函數(shù)必需返回一個值
Gotostatementmissinglabel
----------------------Goto語句沒有標(biāo)號
Hexadecimaloroctalconstanttoolarge
----------------------16進制或8進制常數(shù)太大
Illegalcharacter"x"非法字符
x
Illegalinitialization---------------------非法的初
始化
Illegaloctaldigit---------------------非法的8進
制數(shù)字
Illegalpointersubtraction---------------------非
法的指針相減
Illegalstructureoperation---------------------非
法的結(jié)構(gòu)體操作
Illegaluseoffloatingpoint--------------------非
法的浮點運算
Illegaluseofpointer-----------------------指針使
用非法
Improperuseofatypedefsymbol
---------------類型定義符號使用不恰當(dāng)
In-lineassemblynotallowed--------------------
不允許使用行間匯編
Incompatiblestorageclass--------------------存
儲類別不相容
Incompatibletypeconversion
--------------不相容的類型轉(zhuǎn)換
Incorrectnumberformat
---------------------錯誤的數(shù)據(jù)格式
Incorrectuseofdefault-------------------------
Default使用不當(dāng)
Invalidindirection-------------------------無效的
間接運算
Invalidpointeraddition---------------------指針
相加無效
Irreducibleexpressiontree
---------------------無法執(zhí)行的表達式運算
Lvaluerequired--------------------------------需要
邏輯值0或非0值
Macroargumentsyntaxerror
-----------------宏參數(shù)語法錯誤
Macroexpansiontoolong
--------------------宏的擴展以后太長
Mismatchednumberofparametersin
definition------------------------定義中參數(shù)個數(shù)不匹
配
Misplacedbreak-------------------------此處不應(yīng)
出現(xiàn)break語句
Misplacedcontinue------------------------------止匕
處不應(yīng)出現(xiàn)continue語句
Misplaceddecimalpoint-------------------------此
處不應(yīng)出現(xiàn)小數(shù)點
Misplacedelifdirective-------------------------不
應(yīng)編譯預(yù)處理elif
Misplacedelse---------------------------此處不應(yīng)出
現(xiàn)else
Misplacedelsedirective----------------------止匕處
不應(yīng)出現(xiàn)編譯預(yù)處理else
Misplacedendifdirective------------------------止匕
處不應(yīng)出現(xiàn)編譯預(yù)處理endif
Mustbeaddressable---------------------------必須
是可以編址的
Musttakeaddressofmemorylocation
----------------必須存儲定位的地址
Nodeclarationforfunction"xxx
-----------------沒有函數(shù)xxx的說明
Nostack------------------缺少堆棧
Notypeinformation沒有類型
信息
Non-portablepointerassignment
------------------不可移動的指針(地址常數(shù))賦值
Non-portablepointercomparison
------------------不可移動的指針(地址常數(shù))比較
Non-portablepointerconversion
--------------------不可移動的指針(地址常數(shù))轉(zhuǎn)
換
Notavalidexpressionformattype
-------------------不合法的表達式格式
Notanallowedtype-------------------------不允
許使用的類型
Numericconstanttoolarge----------------------
數(shù)值常太大
Outofmemory----------------------內(nèi)存不夠用
Parameter"xxx"isneverused
----------------能數(shù)xxx沒有用到
Pointerrequiredonleftsideof->
---------------------符號。的左邊必須是指針
Possibleuseof"xxx"beforedefinition
-----------------在定義之前就使用了xxx(警告)
Possiblyincorrectassignment--------------------
賦值可能不正確
Redeclarationof"xxx"------------------------重復(fù)
定義了xxx
Redefinitionof"xxxuisnotidentical
------------------------xxx的兩次定義不一致
Registerallocationfailure----------------------寄
存器定址失敗
Repeatcountneedsanlvalue
----------------重復(fù)計數(shù)需要邏輯值
Sizeofstructureorarraynotknown
----------------結(jié)構(gòu)體或數(shù)給大小不確定
Statementmissing;----------------------語句后
缺少";"
Structureorunionsyntaxerror-----------------
結(jié)構(gòu)體或聯(lián)合體語法錯誤
Structuresizetoolarge-------------------結(jié)構(gòu)體
尺寸太大
Subscriptingmissing]--------------------下標(biāo)缺
少右方括號
Superfluous&withfunctionorarray
----------------函數(shù)或數(shù)組中有多余的“&”
Suspiciouspointerconversion
-------------------可疑的指針轉(zhuǎn)換
Symbollimitexceeded-----------------符號超限
Toofewparametersincall--------------------函
數(shù)調(diào)用時的實參少于函數(shù)的參數(shù)不
Toomanydefaultcases----------------------
Default太多(switch語句中一個)
Toomanyerrororwa
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高科技運動眼鏡行業(yè)跨境出海項目商業(yè)計劃書
- 銀行合規(guī)監(jiān)管系統(tǒng)行業(yè)深度調(diào)研及發(fā)展項目商業(yè)計劃書
- 蘇教版三年級上冊《楓橋夜泊》
- 2025年智能工廠能源管理系統(tǒng)的能源消耗預(yù)測與優(yōu)化控制策略的大數(shù)據(jù)應(yīng)用可行性研究報告
- DB32/T 4552-2023清潔服務(wù)企業(yè)信用及服務(wù)能力評估指標(biāo)
- 2025年中國機箱電源行業(yè)市場專項調(diào)研及投資前景可行性預(yù)測報告
- 法律工作者履職培訓(xùn)班學(xué)習(xí)心得體會
- 紅樓夢主題餐廳
- 四年級英語詞匯復(fù)習(xí)計劃
- 大學(xué)校園環(huán)境管理的具體措施
- 1KV送配電調(diào)試報告
- GB/T 5801-2020滾動軸承機制套圈滾針軸承外形尺寸、產(chǎn)品幾何技術(shù)規(guī)范(GPS)和公差值
- FZ/T 93029-2016塑料粗紗筒管
- 2022年12月山東省普通高中學(xué)業(yè)水平合格性考試語文仿真模擬試卷C(答題卡)
- 塑膠原料來料檢驗指導(dǎo)書
- 人教版音樂三年級下冊知識總結(jié)
- 共點力平衡的應(yīng)用-完整版PPT
- 中國近現(xiàn)代史社會實踐報告-2000字
- 系桿拱橋工程測量施工方案
- ISA-300+使用-300技術(shù)使用說明書
- 高層建筑“一棟一冊”消防安全檔案
評論
0/150
提交評論