参照とは、ポインタ変数と似たような動きをする仕組みです。
とりあえず、1つサンプルを作ってから説明します。
<sample program cpp042-01>
#include <iostream> int main() { int value = 12; int &ref = value; std::cout << "ref = " << ref << std::endl; ref = 18; std::cout << "value = " << value << std::endl; return 0; } |
<実行結果>
ref = 12 value = 18 続行するには何かキーを押してください・・・
参照は、
int &ref = value; |
この「ref」というものです。
名前の前に「&」が付いていますが、アドレスという意味とは違うと考えておいてください。
宣言と同時に「value」を代入していますが、これも「値」を代入している訳ではありません。
参照ですから、変数valueへの参照を渡しています。
もう少しイメージしやすい言葉を使うと、
変数valueの「別名」がrefです。
ポインタ変数とは違うので、アドレスが入っているというイメージではありません。
std::cout << "ref = " << ref << std::endl; |
refの中身を表示すると、valueの中身が表示されます。
ref = 18; std::cout << "value = " << value << std::endl; |
refに値を代入すると、valueの中身が変わります。
ポインタ変数と比べると「*」などを付ける必要が無いので楽に感じます。
ただ、ポインタ変数とは違うため注意しなければならない点があります。
<sample program cpp042-02>
#include <iostream> int main() { int value = 12; int &ref; ref = value; std::cout << "ref = " << ref << std::endl; ref = 18; std::cout << "value = " << value << std::endl; return 0; } |
<コンパイル結果>
error C2530: 'ref': 参照が初期化されずに宣言されています。 続行するには何かキーを押してください・・・
ポインタ変数と同じようなイメージで、参照を宣言だけしておいて、後から変数をセットするようにしてみました。
しかし、コンパイル時にエラーになりました。
参照は「別名」と言いましたが、何の「別名」か分からないまま宣言する事が出来ないのです。
次は関数引数としての参照を説明します。