next up previous
Next: インライン関数 Up: ススンデルCとしてのC++ Previous: newとdelete

参照(リファレンス)

関数を呼んだとき,引数に与えた変数に値を返したい場合には, C言語ではポインタを使うのが一般的である.例えばこんな感じだ.

void swap(int *x, int *y)
{
    int z;
    z = *x; *x = *y; *y = z;
}

main()
{
    int a,b;
    ....
    swap(&a,&b);
    ....
}
C++では,もちろんポインタを使った方法も使えるが,参照を使う 方法も使える.参照は,Pascalでの名前渡し(call by name)に相当する. こんな感じだ.
void swap(int &x, int &y)
{
    int z;
    z = x; x = y; y = z;
}

main()
{
    int a,b;
    ....
    swap(a,b);
    ....
}
内部での実現方法は,ポインタを使った方法とまったく同じだ. しかし,記述の上で,かなり簡潔に書けるようになる.

参照は,引数に使うだけでなく,いろいろなところに使える. もちろん普通の変数としても使えるが,面白いのは関数の返値 として参照を使う場合である.次の例を見てみよう.

int& hoge(int i)
{
    static int x[10];
    return x[i];
}
この例では,static変数の参照を返している.すなわち static変数へのポインタを返しているのと等価だから, 次のようなことができる.
main()
{
    ....
    hoge(2) = 130;
    ....
}
つまり,関数を見かけ上配列のように使うことができるわけだ. もちろん,代入の右辺や普通の計算式に使うこともできる.



Akinori ITO
Thu Aug 7 15:05:13 JST 1997