c++ における"&"について
参照&
ポインタがメモリ上に実体をもったひとつの変数であるのに対し、
参照はあくまで変数の別名であり、メモリ上に実体がない点が異なります。
int a = 5; int b = 10; int& Ref = a; //必ず初期化する必要がある。参照先は配列型であってはならない。 Ref = 6; //Refを書き込めば、aが6になる。(Refとaとは同じ) //ポインタでint* p = a; *p = 6; とするのと同じ。 int& Ref2 = b; //Ref2 = a; さすものを変えることができない。 a = Ref2; //ref2はbと同じ。
参照戻し(オペレータのオーバーロード時によく使う。それ以外の使用頻度は少ない。)
class C { C(); ~C(); int operator(int i,int j) { //処理 } これは値を格納するとき(つまり左辺のとき)うまくいかない。 int main(void) { C test; test(2,2) = 4; } //こうすれば、test(2,2)はただの定数値なので、式は変更可能な左辺値である必要があります。といわれる。 //ここを値と認識されたくない。
class C { C(); ~C(); int& operator(int i,int j) { //処理 } int main(void) { C test; test(2,2) = 4; //int& ref = 4;の時と同じような動作になる。 int a = test(2,2); //returnの変数の値を直接渡せる。 //ポインタのようにint* a = (int*型)とするとかなり煩わしい。 }