通信用語の基礎知識 日本文化チャンネル桜二千人委員会 戻る

通常PC用 / 人気 更新 今日 カテ
電子計算機 > 仕様・構造 > ソフトウェア > プログラミング言語 > 言語仕様
参照
辞書:電算用語の基礎知識 プログラミング仕様編 (PTPROGS)
読み:さんしょう
外語:reference
品詞:名詞

ある変数の別名を持った変数のこと。英語では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; }
}
リンク
関連する用語
変数
参照演算子
参照渡し

[再検索] [戻る]


通信用語の基礎知識検索システム WDIC Explorer Ver 7.03 (16-May-2019)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club
KisoDic