高級(jí)程序員對(duì)C++程序說(shuō)明操作
C++是從C語(yǔ)言發(fā)展演變而來(lái)的,首先是一個(gè)更好的C引入了類的機(jī)制,最初的C++被稱為“帶類的C”1983年正式取名為C++,從1989年開始C++語(yǔ)言的標(biāo)準(zhǔn)化工作,于1994年制定了ANSI C++標(biāo)準(zhǔn)草案于1998年11月被國(guó)際標(biāo)準(zhǔn)化組織(ISO)批準(zhǔn)為國(guó)際標(biāo)準(zhǔn),成為目前的C++程序。
20世紀(jì)80年代,美國(guó)貝爾實(shí)驗(yàn)室的Bjarne Stroustrup博士及其同事在C語(yǔ)言的基礎(chǔ)上引入了面向?qū)ο蟮木幊趟枷牒鸵粋€(gè)class關(guān)鍵字,形成了最早的C++語(yǔ)言原型。后來(lái),C++語(yǔ)言被融入了越來(lái)越多的語(yǔ)言特性,其中最具有意義、影響最深遠(yuǎn)的莫過(guò)于template(模板)的引入。
最終美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)ANSI(American National Standard Institute)和國(guó)際標(biāo)準(zhǔn)化組織ISO(International Standards Organization)一起對(duì)C++語(yǔ)言進(jìn)行了標(biāo)準(zhǔn)化工作,并于1998年正式發(fā)布了C++語(yǔ)言的國(guó)際標(biāo)準(zhǔn)ISO/IEC:98-14882。C++已經(jīng)成為最流行的程序設(shè)計(jì)語(yǔ)言之一。
很多剛接觸程序設(shè)計(jì)的人經(jīng)常會(huì)問(wèn)“C++和C#、Java有哪些區(qū)別?學(xué)哪個(gè)比較好?”這樣的問(wèn)題。在網(wǎng)絡(luò)上搜索一下,也不難發(fā)現(xiàn)這個(gè)問(wèn)題已在各大論壇中成為討論的焦點(diǎn)。C語(yǔ)言是面向過(guò)程的。#t#
C++和C#、Java這3種語(yǔ)言都使用了類似C風(fēng)格的語(yǔ)法,但它們都是面向?qū)ο螅∣OP)的。C++是對(duì)C語(yǔ)言的一個(gè)擴(kuò)充,也就是說(shuō),一個(gè)C語(yǔ)言的程序,也可以認(rèn)為是一個(gè)C++程序(沒(méi)有用到C++高級(jí)特性而已),C#和Java對(duì)C語(yǔ)言沒(méi)有任何的兼容性。
C++和C#、Java這3種語(yǔ)言中,C++是最早出現(xiàn)的,保持了對(duì)C的兼容性,允許指針的存在,允許程序員手動(dòng)高效地管理、使用內(nèi)存(盡管這也是最容易引起問(wèn)題的地方)。C++在發(fā)展的過(guò)程中,不斷地補(bǔ)充語(yǔ)言特性,使得C++成為最靈活的編程語(yǔ)言之一。
C++語(yǔ)言的靈活性是建立在其復(fù)雜的語(yǔ)法之上的,因此對(duì)于初學(xué)者來(lái)說(shuō),很有可能因此望而卻步,但是如果堅(jiān)持下去,就會(huì)發(fā)現(xiàn),再去看C#、Java語(yǔ)法時(shí)會(huì)感到很輕松。C#、Java語(yǔ)言相對(duì)C++語(yǔ)言來(lái)說(shuō)。
在語(yǔ)法上要簡(jiǎn)單得多,因此初學(xué)者很容易上手。二者拋棄了最容易引起問(wèn)題的指針,對(duì)內(nèi)存的管理完全自動(dòng)化,這樣雖然帶來(lái)了程序的穩(wěn)定性和安全性,但是在某種程度上丟失了效率。
提示:因?yàn)閮?nèi)存管理自動(dòng)化,C#、Java語(yǔ)言擁有垃圾自動(dòng)回收機(jī)制,在C++中,申請(qǐng)的內(nèi)存必須由程序員自己手動(dòng)釋放,如果忘記這一點(diǎn)就會(huì)引起內(nèi)存泄露。
C++語(yǔ)言的語(yǔ)言特性在一定程度上彌補(bǔ)了如下不足:部分C++庫(kù)擁有內(nèi)存管理機(jī)制,如STL、Boost等。C++擁有智能指針。某些C++庫(kù)實(shí)現(xiàn)了垃圾回收功能。
Java的程序是運(yùn)行在虛擬機(jī)上(Virtual Machine)的,而C++不是,C++程序的代碼是直接運(yùn)行在物理機(jī)器上的。
就Java和C#二者單獨(dú)來(lái)看。
C#更像是微軟公司和SUN公司進(jìn)行商業(yè)斗爭(zhēng)的產(chǎn)物。歷史上,微軟公司是支持過(guò)Java語(yǔ)言的,代表性的產(chǎn)品有Visual J++和WFC。后來(lái)因?yàn)楸娝苤脑?,微軟公司推出了C#,其目的很明確,就是和Java競(jìng)爭(zhēng)。
實(shí)際上C#和Java在特性上也非常類似(不僅僅是語(yǔ)法)。二者都是為了更加方便地解決應(yīng)用問(wèn)題,在GUI、數(shù)據(jù)庫(kù)訪問(wèn)、網(wǎng)絡(luò)通信、多線程等和實(shí)際應(yīng)用密切相關(guān)的點(diǎn)上都有成熟的解決方案。C++更多地靠第三方的庫(kù)來(lái)實(shí)現(xiàn)這些功能,因?yàn)镃++是一個(gè)國(guó)際標(biāo)準(zhǔn),要在C++中加入這些語(yǔ)言之外的、面向應(yīng)用的特性還需要很長(zhǎng)一段路要走。而C#、Java的擁有者是商業(yè)化公司,各種動(dòng)作自然要敏捷得多。
但是這并不意味著C++程序即將消亡(這樣的言論很多)。不可否認(rèn)的是C++在C#、Java的進(jìn)攻下,丟失了一些領(lǐng)域,但是C++語(yǔ)言仍然在普遍使用,很重要的原因就是因?yàn)镃++既保持了C語(yǔ)言級(jí)別的效率(某些情況下例外),又加入了面向?qū)ο蟮奶匦浴?/P>