看板 C_and_CPP 關於我們 聯絡資訊
包含上面那個.和->的差異 這些問題的答案都是case by case的... 先從簡單的說 .和->的差異 這去看inside the C++ object model裡面就有寫啦 class裡面沒有vptr的情況下 這兩者一樣快 .只不過是透過this指標去取值 這兩個都要作一次 derefernce 在動態多型的情況下 要在run time去查vptr的(指標的->, reference的.)一定比較慢 效率數據的比較在書裡都有列了 下面那個問題 我不太懂*iter指的是什麼 是一個dereferece後能轉型成A*的iterator,還是單純是一個A* 如果iter其實只是A* 你不該用這個變數名稱.. 如果是前者 這牽涉到的變因太多了 包含你iterator的實作結構、轉型的overhead iterator在dereference的時侯有沒有side effect.. 這些變因造成其效率要實測才知道 如果是後者 在compiler最佳化下通常是沒差的 (*iter)的值,就算你不用一個變數存起來 Compiler在最佳化的時侯也會弄進一個暫存器裡 ※ 引述《asail0712 (emeth)》之銘言: : A *a = *iter; : if(a) : { : a->... : } : 或是 : if(*iter) : { : (*iter)->.... : } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.5.35 ※ 編輯: holymars 來自: 114.32.5.35 (12/19 11:41)