最近在coding C++, 得到的結論是語法上跟java真的有點像,但還是有蠻多不同的地方,像是switch case(其實是因為我java這邊都習慣lambda語法了); 指針啦(java裡面全部的物體都是指針,沒有指針跟實體的差別); array啦(C++ array就是指向第一個物體的指針,java的array大概是指針的指針?); list或vector啦(C++裡面的類別其實只是封裝過的結構體,如果你的類別有些東西沒定義的話直接用它的內建容器可能會編譯不過,java裡的類別都繼承了object類別,所以各種list基本上不會出錯)。總之還是差蠻多的。
但我覺得這些差別其實都還好,真正差別最大的果然還是類別這種東西。
首先C++的類別常常幹的事情是類內宣告類外定義(大概是類似於java的abstract class或interface),因為在類內定義的東西都是inline函數會造成檔案變大;相對之下java的函數一般都直接寫在class裡面了,個人覺得java的寫法封裝性比較好。
其次就是關於inner class的部分,C++的inner class全部都是static class,所以當裡面的class成員跟外面的class成員根本沒有任何直接關係,也就是如果要調用外面class的非static成員,你得先有一個static成員的指標......?我改用C++不就是嫌java的指標太多嗎?我知道這算是在無理取鬧,但C++在debug的時候常常會搞不清楚自己死在哪裡,因為在引用各種標頭檔跟模板之後,問題可能都已經轉好幾個彎了,而且因為有些東西不算嚴格,所以java不會出現的問題在C++裡面都會爆出來。
總之這其實是一篇被forward_list搞瘋的我所發的抱怨文