C++概論(C語言過度版)_第1頁
C++概論(C語言過度版)_第2頁
C++概論(C語言過度版)_第3頁
C++概論(C語言過度版)_第4頁
C++概論(C語言過度版)_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論