有感
事實上,長期學習C++下來有一個想法,事實上,利用C++語法寫出一個程式是還算簡單的,雖然C++語法繁多,體系龐大,但整體而言是一個精密的系統,不難學。
觀念要清楚,這是不用說的了,重點是要清楚所寫每一行後面所帶來的效率成本,這就有趣了,而我現在大部分看的書,最主要都在討論,C++高階細節背後所帶來的成本。
我曾經聽人說過,使用 vector 是不智的,背後帶來的成本太高了,因為把一大串的member fucntion
在定義時皆instantiate,事實上不全然是這個樣子
vector <int> u;
vector <float> v;
就這兩行而言,當初有人跟我解釋說,complier
會把其中的 member function
全部instantiate,但是這是一個非常大的錯誤,根據C++ Primer 3/e中文版 p.830的描述
一個class tempalte
的member function
本身也是一個template
,Standard C++ 規定,像這樣子的一個member function
,只有在它被呼叫(invoke)或是其位址被取得時(我猜是a pointer to class member function
)才需要被具現出來
也就是說,事實上,雖然上面兩行程式碼,會有兩個 instantiation ,但是如果不呼叫其中的 member function , 則背後則不會有任何 code 產生,也就是說,當你invoke時,方為產生的話,就如同你手工精鋉的一樣,所以,一開始所討論的效率問題是不存在的
---
有時候,研究高階的細節,可能遠比躲掉低階的錯誤來的困難
沒有留言:
張貼留言