星期日, 7月 06, 2008

再讀The C++ Programming Language

兩年前

標題寫的那麼聳動,其實目前只重讀了半本而已。兩年前只唸了前七章,這次一口氣念到第十五章,而且還在繼續前進,一定要全破STL!!

跟兩年前相比,兩年前的自己不過大三下,還沒經過病理和臨床的摧殘所以沒有Unlimited Brain Word,腦中有無限個word可以存資料,32bit定址失敗還可以AWE喔^_<

C++真是個可以一學再學的好東西,跟兩年前相比現在的自己看的更深入,作者該死的mini calculator範例當年完全看沒有,一頭霧水越看越花,現在看起來mini calculator是個很精彩的mini Parser範例,不過還是只適合有愛的人看就是,初學者來這邊一定會不支倒地,「為了防止太多的細節混淆我要講的東西,所以XX我們就跳過」,老爹,最會讓初學者暈頭轉向的就是你舉的parser吧.....

再來是很多C++的疑問看多了,心中有了疑團,看書就比較看的有條理,當初看書中冗長無味有如雞肋般的各式各樣的規則,現在看起來全部都有重要的實做意義,一邊看一邊就會覺得「當初C_AND_CPP版某某文的作者要是有看到這段話,他就不用邊哭邊PO文求救」,但是C++的小規則之多,越看到後面就會越膽顫心驚。function overloading的順序已經很繁瑣,template function來亂入更是大亂鬥,讓你完全猜不到到底compiler會呼叫哪個東西。書本開頭講:「好的程式語言不應該讓程式設計師把心力放在小細節,而是宏觀的設計。」怎麼該死的小規則卻這麼多啊....

Class的機制還好,出現derived class以後開始出現亂七八糟的name hiding還可以接受,等Multiple inheritance出現以後我眼前的世界就變成了七彩的顏色,「我想叫Foo::bar,可是萬一我的base class總共有五個Foo怎麼辦?」「我要呼叫一個叫temp()的virtual function,問題是我每個base class都有一個virtual function叫做temp()啊啊啊啊啊啊」,難怪有人寧願放棄整個繼承機制不要用,明明有好好的class還要用struct搭配pointer to function.....。

這些還不是最糟糕的,不要忘記到處都可能埋藏玄妙的typedef,隨時將token的定義偷天換日。implementation dependent的detail,可能讓一段無辜的expression對程式設計師痛下殺手,我還沒提到無視scope和compiler的萬惡Macro.....。C++提供的東西太多,還有很多platform dependent的東西,讓某些人發出了怒火。雖然我還是對C++有所偏好,不過有些論點實在是不得不同意,「天啊!!他們連加號都可以重載!!」「你知道你這一行到底會產生幾個暫時物件嗎?」,「C用不好會轟散自己的腳趾,C++增加了一些安全的工具,不過萬一用壞了是整條大腿都會被轟掉」。一邊看STL的實際code,裡面瘋狂的運用typedef和template,我默默的點頭orz

目前幹掉了半本,剩下繼續邁進... 全文連結

0 意見: