※ 引述《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