2013年5月28日 星期二

C++ 學習小筆記 object (variable) aliasing

c++ aliasing object name
在obj C中 所有的 <id> 都是一個object的pointer 加上有ARC所以object在assign 的過程中不必擔心memory裡面的東西會被copy一份,改了obj1卻沒有改到obj2的這種問題 但是在c/c++裡面就會遇到了 當有一個
class Room {
   int id;
}
當我宣告一個 Room 的陣列 並且分別assign為1,2,3
Room array[3];
for(int i=0;i<3;i++) array[i]=i;
這個時候我在某個function裡想要對array[3]這個Room物件做一些操作或者是計算的時候發現,要不斷的打array[3]這一串字 非常的煩惱
ex.
for(int j=0;j<array[3]*array[3];j++){
   myArray[j] = array[3]+array[3]*array[3]*8;
}
之類的 這個時候恨不得可以把array[3]換成一個room 或是 r 之類的變數,讓他看起來一目了然
經過google大神的指導,原來答案就是一直以來被我嗤之以鼻的,每次考試面試都愛拿出來找人麻煩的 "&" 符號! 原來Room &r = array[3] 就可以把r 這個變數的記憶體位置指到和array[3]一模一樣,也就是說 r 就是 array[3]而不只是array[3]的一份copy!!! 所以上面的城市馬就可以改寫成下面這樣
Room &r = array[3];
for(int k=0;k<r*r;k++){
   myArray[j] = r+ r*r*8;
}
輕鬆了不少呢! 老師我錯了我不應該瞧不起這些小地方的XD 寫在這裡乾大家分享囉~

技術提供:Blogger.