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*型)とするとかなり煩わしい。
}