通信用語の基礎知識 IPv4
戻る
参加者募集中

参照

辞書:電算用語の基礎知識 プログラミング仕様編 (PTPROGS)
読み:さんしょう
外語:reference 英語
品詞:名詞
2010/11/10 作成
2014/07/22 更新

ある変数の別名を持った変数のこと。英語ではreference(リファレンス)という。

プログラミング言語にもよるが、C++の場合は、次の構文で宣する。

データ型 &参照の名前 = 元の変数名;

参照変数はあくまで別名なので、宣言と同時に元の変数が代入されなければならない。宣言のみをすることはできない。

そして例えば、int &rnを宣言し、このrnにnを代入すれば、rnはnの参照となり、rnに対する読み書きはnに対する読み書きになる。

int n;
int &rn1;            /* ERROR */
int &rn2 = n;        /* OK */

C/C++

参照はC++で使えるようになった。Cでは使えない。

Cの場合は値渡しの一種「ポインター渡し」のみに対応しており、参照渡しに対応していない。

メリットとデメリット

ポインター渡しの場合、受け取る側はポインター変数を宣言し、その内容は間接演算子(アスタリスク)を使って読み書きすることになる。

一方、参照渡しの場合は、受け取る側が参照変数を宣言し、その内容は参照変数に対する読み書きで行なう。このため間接演算子を使う必要が無い。

間接演算子が多くなるとソースが読みにくくなるが、そのような問題も回避できる。

但し、呼ばれる側は簡潔になるという利点があるが、呼ぶ側は値渡しと区別が付かない(ポインター渡しなら&演算子を使うが、参照渡しでは何も付けない)ので、分かりにくくなるという問題点もある。

クラス

C++で参照渡しが作られたのは、C++で追加されたクラスの実装を自然にするためである。特に、代入演算子などのオーバーロードやコンストラクターで頻繁に使われる。

例えば、CやC++では、変数の代入が可能である。

x = y;

C++で独自にクラスを作ったとき、この処理を実現するためには自前で処理を書く必要があり、これを実現するのに参照が必要となる。

class A
{
    int a;
    public:
    A &operator=(const int &n) { this->a = n; return *this; }
};

このように宣言すれば、xとyがともにclass Aのインスタンスだとすると、x = y;という処理が可能になる。

参照を使わず、ポインター渡しだけで書く場合、次のようになる。

class A
{
    int a;
    public:
    A *operator=(const int *p) { this->a = *p; return this; }
}
関連する用語
変数
参照演算子
参照渡し

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.02 (21-Aug-2018)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club