星期四, 9月 14, 2006

有感

事實上,長期學習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 tempaltemember function 本身也是一個template,Standard C++ 規定,像這樣子的一個member function,只有在它被呼叫(invoke)或是其位址被取得時(我猜是 a pointer to class member function)才需要被具現出來

也就是說,事實上,雖然上面兩行程式碼,會有兩個 instantiation ,但是如果不呼叫其中的 member function , 則背後則不會有任何 code 產生,也就是說,當你invoke時,方為產生的話,就如同你手工精鋉的一樣,所以,一開始所討論的效率問題是不存在的

---
有時候,研究高階的細節,可能遠比躲掉低階的錯誤來的困難

張貼留言