▲ C++ Program
摘要: 測(cè)試結(jié)果:
string array: times - 10000 memory - 1740k VM - 828k
static char array: times - 10000 memory - 1740k VM - 820k
char* array: times - 10000 memory - 2292k VM - 1368k
string vector: times - 10000 memory - 1752k VM - 828k
char* vector: times - 10000 memory - 2340k VM - 1420k
可以看出,使用string以及vector或者靜態(tài)分配數(shù)組,內(nèi)存消耗是比較少的,多次new小內(nèi)存導(dǎo)致內(nèi)存消耗明顯增多。
閱讀全文
摘要: (ADB) Again, this has to do with practical and theoretical reasons. On the practical side, when Linux got started gcc didn't have an efficient C++ implementation, and some people would argue that even today it doesn't. Also there are many more C programmers than C++ programmers around. On theoretical grounds, examples of OS's implemented in Object Oriented languages are rare (Java-OS and Oberon System 3 come to mind), and the advantages of this approach are not quite clear cut (for OS design, th
閱讀全文
摘要: 在1998年的元旦,Bjarne Stroustrup(C++之父)接受了IEEE《計(jì)算機(jī)》雜志記者的專(zhuān)訪。編輯很自然的認(rèn)為他會(huì)對(duì)于過(guò)去七年來(lái)使用他創(chuàng)建的語(yǔ)言進(jìn)行面對(duì)對(duì)象設(shè)計(jì)做一個(gè)歷史性的回顧。而在這個(gè)專(zhuān)訪中,記者獲得了更有價(jià)值的新聞,但是最后編輯決定為了整個(gè)IT產(chǎn)業(yè),這個(gè)稿子不能發(fā)表,但是就像其它被砍掉的新聞,往往還是弄得路人皆知的。
這一篇是當(dāng)時(shí)專(zhuān)訪的完全拷貝,沒(méi)有被編輯、刪改或者做過(guò)什么潤(rùn)色處理,也沒(méi)有發(fā)布過(guò),可能看起來(lái)不像常見(jiàn)的雜志文章,但這是實(shí)情。
你會(huì)發(fā)現(xiàn)真正引人入勝的地方... ...
閱讀全文
摘要: Javascript是世界上最受誤解的語(yǔ)言,其實(shí)C++何嘗不是。坊間流傳的錯(cuò)誤的C++學(xué)習(xí)方法一抓就是一大把。我自己在學(xué)習(xí)C++的過(guò)程中也走了許多彎路,浪費(fèi)了不少時(shí)間。
為什么會(huì)存在這么多錯(cuò)誤認(rèn)識(shí)?原因主要有三個(gè),一是C++語(yǔ)言的細(xì)節(jié)太多。二是一些著名的C++書(shū)籍總在(不管有意還是無(wú)意)暗示語(yǔ)言細(xì)節(jié)的重要性和有趣。三是現(xiàn)代C++庫(kù)的開(kāi)發(fā)哲學(xué)必須用到一些犄角旮旯的語(yǔ)言細(xì)節(jié)(但注意,是庫(kù)設(shè)計(jì),不是日常編程)。這些共同塑造了C++社群的整體心態(tài)和哲學(xué)。
閱讀全文
摘要: 最近寫(xiě)了一篇關(guān)于C++0x Concepts的文章,意料之外地引起了一場(chǎng)小規(guī)模口水仗。回各位帖子的同時(shí),回想這些年C++社群的大小爭(zhēng)論,覺(jué)得有必要把一些長(zhǎng)久以來(lái)在C++爭(zhēng)論中出現(xiàn)的誤解列舉出來(lái)。
…History became legend, legend became myth …- The Lord of the Rings
哈雷將軍的笑話(huà)想必大家都聽(tīng)過(guò)。一句話(huà)經(jīng)口口相傳,每個(gè)人都根據(jù)自己的主觀意念加以潤(rùn)色,修補(bǔ),歪曲…到最后就面目全非。
閱讀全文
摘要: 繼承關(guān)系是一種耦合度很高的關(guān)系,它與組合及一般化(genericity)一樣,提供了OO中的一種基本方法,用以將不同的軟件組件組合起來(lái)。一個(gè)類(lèi)的實(shí)例同時(shí)也是那個(gè)類(lèi)的所有的祖先的實(shí)例。為了保證面向?qū)ο笤O(shè)計(jì)的有效性,我們應(yīng)該保存下這種關(guān)系的一致性。在子類(lèi)中的每一次重新定義都應(yīng)該與在其祖先類(lèi)中的最初定義進(jìn)行一致性檢查。子類(lèi)中應(yīng)該保存下其祖先類(lèi)的需求。如果存在著不能被保存的需求,就說(shuō)明了系統(tǒng)的設(shè)計(jì)有錯(cuò)誤,或者是在系統(tǒng)中此處使用繼承是不恰當(dāng)?shù)摹S捎诶^承是面向?qū)ο笤O(shè)計(jì)的基礎(chǔ),所以才會(huì)要求有一致性檢測(cè)。C++中對(duì)于非虛擬函數(shù)重載的實(shí)現(xiàn), 意味著編譯器將不會(huì)為其進(jìn)行一致性檢測(cè)。C++并沒(méi)有提供面向?qū)ο笤O(shè)計(jì)的這方面的保證。
閱讀全文
摘要: C++允許在參數(shù)類(lèi)型不同的前提下重載函數(shù)。重載的函數(shù)與具有多態(tài)性的函數(shù)(即虛函數(shù))不同處在于:調(diào)用正確的被重載函數(shù)實(shí)體是在編譯期間就被決定了的;而對(duì)于具有多態(tài)性的函數(shù)來(lái)說(shuō),是通過(guò)運(yùn)行期間的動(dòng)態(tài)綁定來(lái)調(diào)用我們想調(diào)用的那個(gè)函數(shù)實(shí)體。多態(tài)性是通過(guò)重定義(或重寫(xiě))這種方式達(dá)成的。請(qǐng)不要被重載 (overloading)和重寫(xiě)(overriding)所迷惑。重載是發(fā)生在兩個(gè)或者是更多的函數(shù)具有相同的名字的情況下。區(qū)分它們的辦法是通過(guò)檢測(cè)它們的參數(shù)個(gè)數(shù)或者類(lèi)型來(lái)實(shí)現(xiàn)的。重載與CLOS中的多重分發(fā)(multiple dispatching)不同,對(duì)于參數(shù)的多重分發(fā)是在運(yùn)行期間多態(tài)完成的。
閱讀全文
摘要: C++ARM中解釋說(shuō)type-safe linkage并不能100%的保證類(lèi)型安全。既然它不那100%的保證類(lèi)型安全,那么它就肯定是不安全的。統(tǒng)計(jì)分析顯示:即便在很苛刻的情況下,C++ 出現(xiàn)單獨(dú)的O-ring錯(cuò)誤的可能性也只有0.3%。但我們一旦將6種這樣的可能導(dǎo)致出錯(cuò)的情況聯(lián)合起來(lái)放在一起,出錯(cuò)的幾率就變得大為可觀了。在軟件中,我們經(jīng)常能夠看到一些錯(cuò)誤的起因就是其怪異的聯(lián)合。OO的一個(gè)主要目的就是要減少這種奇怪的聯(lián)合出現(xiàn)。
閱讀全文
摘要: 【P&S 94】中提到對(duì)于類(lèi)型安全的檢測(cè)來(lái)說(shuō)有兩種假設(shè)。一種是封閉式環(huán)境下的假設(shè),此時(shí)程序中的各個(gè)部分在編譯期間就能被確定,然后我們可以對(duì)于整個(gè)程序來(lái)進(jìn)行類(lèi)型檢測(cè)。另一種是開(kāi)放式環(huán)境下的假設(shè),此時(shí)對(duì)于類(lèi)型的檢測(cè)是在單獨(dú)的模塊中進(jìn)行的。對(duì)于實(shí)際開(kāi)發(fā)和建立原型來(lái)說(shuō),第二種假設(shè)顯得十分有效。然而,【P&S 94】中又提到,“當(dāng)一種已經(jīng)完成的軟件產(chǎn)品到達(dá)了成熟期時(shí),采用封閉式環(huán)境下的假設(shè)就可以被考慮了,因?yàn)檫@樣可以使得一些比較高級(jí)的編譯技術(shù)得以有了用武之處。只有在整個(gè)程序都被了解的情況下,我們才可能在其上面執(zhí)行諸如全局寄存器分配、程序流程分析及無(wú)效代碼檢測(cè)等動(dòng)作。”(附:【P&S 94】Jens Palsberg and Michael I. Schwartzbach, Object-Oriented Type Systems, Wiley 1994)。
閱讀全文
摘要: 在所有對(duì)C++的批評(píng)中,虛擬函數(shù)這一部分是最復(fù)雜的。這主要是由于C++中復(fù)雜的機(jī)制所引起的。雖然本篇文章認(rèn)為多態(tài)(polymorphism)是實(shí)現(xiàn)面向?qū)ο缶幊蹋∣OP)的關(guān)鍵特性,但還是請(qǐng)你不要對(duì)此觀點(diǎn)(即虛擬函數(shù)機(jī)制是C++中的一大敗筆)感到有什么不安,繼續(xù)看下去,如果你僅僅想知道一個(gè)大概的話(huà),那么你也可以跳過(guò)此節(jié)。【譯者注:建議大家還是看看這節(jié)會(huì)比較好】
在C++中,當(dāng)子類(lèi)改寫(xiě)/重定義(override/redefine)了在父類(lèi)中定義了的函數(shù)時(shí),關(guān)鍵字virtual使得該函數(shù)具有了多態(tài)性,但是 virtual關(guān)鍵字也并不是必不可少的(只要在父類(lèi)中被定義一次就行了)。編譯器通過(guò)產(chǎn)生動(dòng)態(tài)分配(dynamic dispatch)的方式來(lái)實(shí)現(xiàn)真正的多態(tài)函數(shù)調(diào)用。
閱讀全文
摘要: 算起來(lái),我用Visual C++也有將近5年的歷史了。在這期間,我也曾涉獵過(guò)Visual Basic和Delphi,但都是淺嘗而止;Visual C++始終是我的主業(yè)。可是努力的成果如何呢?我用Delphi作出了十多個(gè)有規(guī)模的軟件,用VB--雖然我用在VB上的時(shí)間只有短短的兩三個(gè)月--也有兩個(gè)像樣的項(xiàng)目;然而,在我付出了最大熱情和最多努力的Visual C++上面,卻只作出了三個(gè)自己看得上眼的軟件。
閱讀全文
摘要: [譯者按] Bjarne Stroustrup博士,1950年出生于丹麥,先后畢業(yè)于丹麥阿魯斯大學(xué)和英國(guó)劍橋大學(xué),AT&T大規(guī)模程序設(shè)計(jì)研究部門(mén)負(fù)責(zé)人, AT&T、貝爾實(shí)驗(yàn)室和ACM成員。1979年,B. S開(kāi)始開(kāi)發(fā)一種語(yǔ)言,當(dāng)時(shí)稱(chēng)為“C with Class”,后來(lái)演化為C++。1998年,ANSI/ISO C++標(biāo)準(zhǔn)建立,同年,B. S推出了其經(jīng)典著作The C++ Programming Language的第三版。C++的標(biāo)準(zhǔn)化標(biāo)志著B(niǎo). S博士?jī)A20年心血的偉大構(gòu)想終于實(shí)現(xiàn)。但是,計(jì)算技術(shù)的發(fā)展一日千里,就在幾年前人們還猜想C++最終將一統(tǒng)天下,然而隨著Internet的爆炸性增長(zhǎng),類(lèi)似Java、C#等新的、現(xiàn)代感十足的語(yǔ)言咄咄逼人,各種Script語(yǔ)言更是如雨后春筍紛紛涌現(xiàn)。在這種情況下,人們不禁有些惶恐不安。C++是不是已經(jīng)過(guò)時(shí)了呢?其前景如何?標(biāo)準(zhǔn)C++有怎樣的意義?應(yīng)該如何學(xué)習(xí)?我們不妨看看B. S對(duì)這些問(wèn)題的思考。以下文字是譯者從Stroustrup1998年之后發(fā)表的若干文章、談話(huà)筆記中精選出來(lái)的,由于出處不一,內(nèi)容多有重復(fù),為保持完整,亦一并譯出。
閱讀全文