こんにちは。
C言語には &(参照)は無いはずですが、C++にはあります。なので、C++と仮定して回答します。
C++で int& foo
と書くと、int型変数fooへの「参照」となります。参照はざっくり「制限のあるポインタ」と理解すれば大きくは外れないです。主な制限は初期化しかできずポイント先を変更できないことです。(他にNULLにしてはいけないというプログラマーが守るべき規約もあります。)
fooが参照する先を変更するコード(例えば、foo =123;
)を書いてもコンパイラはエラーにしません。
次に、int const& bar
と書くと、int型変数barへの「const参照」となります。これは参照よりも更に制約がきついものです。参照先を変更するコード(例えば、bar =123;
)を書くとコンパイラはエラーを報告してきます。これにより間違って変数が修正されることを回避するものです。
最後に、これはかなり高度な話題が絡んでくるのですが、「参照」は定数をポイントできません。ポイント先を変更できるのが「参照」ですがポイント先として定数を指定するのは明らかにバグですのでコンパイラはエラーを報告してきます。
逆にconst参照は定数をポイントできます。ポイント先を変更しないと宣言しているのですから、問題ないからです。
このように&を入れることによって処理速度の向上を図っているのでしょうか?
性能向上を狙っている可能性はありますが、多くの処理系ではご提示のコードの nt const& size
は性能が劣化するケースが多いと思います。int型のバイト数はポインタ型のそれと等しいかより小さいです。
更に参照はアドレスをロードしてから値をロードするという2ステップの処理が必要です。これに対して、int型なら直接値をロードできるので1ステップ省けます。なのでポインタ型よりバイト数が少ない型をconst参照で渡すのは性能的な利点がない処理系がほとんどと思います。