資源描述:
《c++入門 (c++教程 c++入門 c++編程)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、C++入門(C++教程C++入門C++編程)C++入門主題:初學(xué)者,你應(yīng)當(dāng)如何學(xué)習(xí)C++以及編程作者:未知文章來(lái)源:天極Yesky軟件頻道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++書籍總在(不管有意還是無(wú)意)暗示語(yǔ)言細(xì)節(jié)的重要性和有趣。三是現(xiàn)代C++庫(kù)的開發(fā)哲學(xué)必須用到一些犄角旮旯的語(yǔ)言細(xì)節(jié)(但注意,是庫(kù)設(shè)計(jì),不是日常編程)。這些共同塑造了C++社
2、群的整體心態(tài)和哲學(xué)?! 问堑谝粭l還未必能夠成氣候,其它語(yǔ)言的細(xì)節(jié)也不少(盡管比起C++起來(lái)還是小巫見大巫),就拿Javascript來(lái)說(shuō),作用域規(guī)則,名字查找,closure,for/in,這些都是細(xì)節(jié),而且其中還有違反直覺的。但許多動(dòng)態(tài)語(yǔ)言的程序員的理念我猜大約是學(xué)到哪用到哪罷。但C++就不一樣了,學(xué)C++之人有一種類似于被暗示的潛在心態(tài),就是一定要先把語(yǔ)言核心基本上吃透了才能下手寫出漂亮的程序。這首先就錯(cuò)了。這個(gè)意識(shí)形成的原因在第二點(diǎn),C++書籍。市面上的C++書籍不計(jì)其數(shù),但有一個(gè)共同的缺點(diǎn),就是講語(yǔ)言細(xì)節(jié)的書太多——《C++gotchas》,《Effec
3、tiveC++》,《MoreEffectiveC++》,但無(wú)可厚非的是,C++是這樣一門語(yǔ)言:要拿它滿足現(xiàn)代編程理念的需求,尤其是C++庫(kù)開發(fā)的需求,還必須得關(guān)注語(yǔ)言細(xì)節(jié),乃至于在C++中利用語(yǔ)言細(xì)節(jié)已經(jīng)成了一門學(xué)問。比如C++模板在設(shè)計(jì)之初根本沒有想到模板元編程這回事,更沒想到C++模板系統(tǒng)是圖靈完備的,這也就導(dǎo)致了《ModernC++Design》和《C++TemplateMetaprogramming》的驚世駭俗。 這些技術(shù)的出現(xiàn)為什么驚世駭俗,打個(gè)比方,就好比是一塊大家都認(rèn)為已經(jīng)熟悉無(wú)比,再無(wú)秘密可言的土地上,突然某天有人挖到原來(lái)地下還蘊(yùn)藏著最豐富的石油
4、。在這之前的C++雖然也有一些細(xì)節(jié),但也還算容易掌握,那可是C++程序員們的happyoldtimes,因?yàn)镃++的一切都一覽無(wú)余,everythingisfiguredout。然而《ModernC++Design》的出世告訴人們,“瞧,還有多少細(xì)節(jié)你們沒有掌握啊。”于是C++程序員們久違的激情被重燃起來(lái),奮不顧身的踏入細(xì)節(jié)的沼澤中。尤其是,模板編程將C++的細(xì)節(jié)進(jìn)一步挖掘到了極致——我們干嘛關(guān)心涉及類對(duì)象的隱式轉(zhuǎn)換的優(yōu)先級(jí)高低?看看boost::is_base_of就可以知道有多詭異了?! 〉畲蟮膯栴}還在于,對(duì)于這些細(xì)節(jié)的關(guān)注還真有它合適的理由:我們要開發(fā)現(xiàn)代
5、模板庫(kù),要開發(fā)activelibrary,就必須動(dòng)用模板編程技術(shù),要?jiǎng)佑媚0寰幊碳夹g(shù),就必須利用語(yǔ)言的犄角旮旯,enable_if,type_traits,甚至連早就古井無(wú)波的C宏也在亂世中重生,看看boost::preprocessor有多詭異就知道了,連C宏的圖靈完備性(預(yù)編譯期的)都被挖掘出來(lái)了。為什么要做這些?好玩?標(biāo)榜?都不是,開發(fā)庫(kù)的實(shí)際需求。但這也正是最大的悲哀了。在boost里面因?qū)嶋H需求而動(dòng)用語(yǔ)言細(xì)節(jié)最終居然能神奇的完成任務(wù)的最好教材就是boost::foreach,這個(gè)小設(shè)施對(duì)語(yǔ)言細(xì)節(jié)的發(fā)掘達(dá)到了驚天地泣鬼神的地步,不信你先試著自己去看看它的源
6、代碼,再看看作者介紹它的文章吧。而boost::typeof也不甘其后——C++語(yǔ)言里面有太多被“發(fā)現(xiàn)”而不是被“發(fā)明”的技術(shù)。難道最初無(wú)意設(shè)置這些語(yǔ)言規(guī)則的家伙們都是Oracles? 因?yàn)闆]有variadictemplates,人們用宏加上缺省模板參數(shù)來(lái)實(shí)現(xiàn)類似效果。因?yàn)闆]有concepts,人們用模板加上析構(gòu)函數(shù)的細(xì)節(jié)來(lái)完成類似工作。因?yàn)闆]有typeof,人們用模板元編程和宏加上無(wú)盡的細(xì)節(jié)來(lái)實(shí)現(xiàn)目標(biāo)…C++開發(fā)者們的DIY精神不可謂不強(qiáng)?! ∪欢绻麅H僅是因?yàn)橐_發(fā)優(yōu)秀的庫(kù),那么涉及這些細(xì)節(jié)都還是情有可原的,至少在C++09出現(xiàn)并且編譯器廠商跟上之前,這些
7、都還能說(shuō)是不得已而為之。但我們廣大的C++程序員呢?大眾是容易被誤導(dǎo)的,我也曾經(jīng)是。以為掌握了更多的語(yǔ)言細(xì)節(jié)就更牛,但實(shí)際卻是那些語(yǔ)言細(xì)節(jié)十有八九是平時(shí)編程用都用不到的。C++中眾多的細(xì)節(jié)雖然在庫(kù)設(shè)計(jì)者手里面有其用武之地,但普通程序員則根本無(wú)需過(guò)多關(guān)注,尤其是沒有實(shí)際動(dòng)機(jī)的關(guān)注。一般性的編碼實(shí)踐準(zhǔn)則,以及基本的編程能力和基本功,乃至基本的程序設(shè)計(jì)理論以及算法設(shè)計(jì)。才是真正需要花時(shí)間掌握的東西?! W(xué)習(xí)最佳編碼實(shí)踐比學(xué)習(xí)C++更重要??磧?yōu)秀的代碼也比埋頭用差勁的編碼方式寫垃圾代碼要有效。直接、清晰、明了、KISS地表達(dá)意圖比玩編碼花招要重要… 避免去過(guò)問任何語(yǔ)言細(xì)
8、節(jié),除非必