精華區beta Programming 關於我們 聯絡資訊
※ 引述《giive (lala)》之銘言: : ※ 引述《tinlans.bbs@whshs.cs.nccu.edu.tw (汀)》之銘言: : : 這裡不是說一定要把 C++ 玩到出神入化, : : 而是說一個好的 C++ 老師最好就是本身就應該把 C++ 玩到出神入化, : : 不然很容易會發生誤導學生的可能性, : : 說出「C++ 天生就是比 C 慢」、 : ^^^^^^^^^^^^^^^^^^^ : 完蛋了@@! , 我是真的這樣覺得 : 請問那裡錯了 這個嘛 先不論對錯 其實「C++ 天生就是比 C 慢」這是一個很詭異的命題 舉個例子來說好了 有一家水果店只賣品種A的蘋果 一顆賣100塊 另一家水果店也賣相同的品種A蘋果 一樣是一顆100塊 但這一家水果店還賣品種B的蘋果 一顆105塊 還賣品種C的蘋果 一顆110塊 「C++ 天生就是比 C 慢」這個命題有點像是說 「第二家水果店賣的蘋果比第一家貴」一樣 C++ 是從 C 上延展出來的 所以 C++ 擁有所有 C 的優點 包括效能 這沒有本質上的差異 但是 C++ 另外提供你物件導向設計的可能性 物件導向的三大概念 封裝 繼承 多型 封裝 這不會有額外的 cost 繼承 子類別的 constructor/destructor 會呼叫父類別的 constructor/destructor 可以算是多餘的 cost 不過想想這跟你在 C 裏 call init/delete 建立/摧毀物件時另外又 call 了 子物件的 init/delete 又有什麼不同呢 如果你不想在讓物件建立/摧毀時負擔了整個繼層架構的 constructor/destructor 你只要不為類別定義 constructor/destructor 即可 多型 為了達成多型的抽象性 virtual function 隨之而生 call virtual function 的成本會比 function 高 大概是 2~3 倍的時間 不過 除非是大量 call 很小的 vitural function 不然那種效能上的差異是 看不出來的 也不容易量得出來 用 C++ 寫 Application 之所以會比 C 慢 這並不是語言本身在慢 而是設計方式改變了 看看 Design Pattern 這本書吧 軟體的品質並不是只有效能而已 為了讓軟體品質便好 許多中間層的介入 再加上良好的物件管理 這的確是會讓程式比較慢 不過通常這個代價是值得的 這慢會慢多少呢 除非是開發者對效體的議題不是很清楚 不然以物件導向設計的 Application 差不多只比程序導向的設計慢幾個百分比而已 C++ 的爸爸是預計會多 5% (我記得沒錯的話) 5% 是很少的 但他換來的優點卻不只有 5% 隨著對 C++ 的瞭解的深入 你愈能控制這多出來的 cost 記得通常 90% 的效能只決定在 10% 的 code 上 換個命題吧 「學 C++ 天生就是比 C 慢」 呵呵 學 C++ 好幾年了 現在還在學 哈 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.222.148.171