>>800
C++ で参照渡しする理由は:
1.構造体などをそのまま引数に渡すと、スタックにコピーする動作が入ってしまい、
 構造体のサイズが大きいと時間がかかる。参照渡すにすると先頭アドレス
 (4バイト、または、8バイト)だけがスタックにコピーされるので効率がいい。
 int, float などは、中身のサイズとアドレスのサイズが変わらないので参照渡し
 にしてもコピー動作に置いては効率が上がらない。そして、実際に引数を
 読み取る段階では、参照渡しは1クロックほど時間が余計にかかってしまう。

2. 戻り値には1つの値/オブジェクト/変数しか返すことが出来ない。そのため、2つ以上の
 値を返したい場合には、C では伝統的には、引数にポインタ渡しで変数の先頭アドレス
 を渡し、そのアドレスを介して対応する変数に値を書き込む方法をとっていた。
 C++ では、ポインタ * の変わりに参照 & を使うことが出来るようになった。
 参照の方が見易かったり、分かりやすかったりする事があるといわれている。

3. const int &a や const float &a では、値を呼び出し側に返すことが出来ない。なぜなら、
 const 属性が付いているから呼び出された関数側からは書き込めないため。
 その上、アドレスのBIT数が、中身のBIT数と同じか、むしろ大きいので、実引数から
 スタックにある仮引数へのコピー動作に置いても効率も上がらない。
 さらに、参照なので、実際に読み取るときには1クロック余計な時間がかかってしまう。
 だから、int a や float a で渡すほうが良い。