[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
参照はC++の機能で、参照した変数の別名というものです。
分かりづらいですが、ポインタのようなものと考えてください。
参照は、初期化時に必ず他の変数への参照が必要です。
int& ref;
これはエラーです。
何故かというと、参照は他の変数の別名だからです。
別名なのに、何も無いというのはおかしいですよね。
では、実際に使ってみましょう!
class Hoge
{
public :
int a;
};
void main(void)
{
Hoge h;
h.a = 10;
// 参照を保存する
Hoge& ref = h;
ref.a *= 2;
printf( "%d", h.a );
}
出力されるのは20です。
ポインタと同じように、参照先の変数の値を変更することが出来ます。
参照先へアクセスするときは「.」を使います。
さて、参照を少し学んだところで少し役立つ使い方を試してみましょう。
class Chara
{
public :
char name[128];
};
// キャラクターの名前を表示する関数
void dispName( struct Chara chara )
{
printf( "NAME : %s", chara.name );
}
void main(void)
{
Chara Nhara;
Nhara.name = "Rsuke";
dispName( Nhara );
}
皆さんは自分で関数を作成するときに、こんな風にしていませんか?
構文的には全く問題は無いのですが...
Chara Nhara;
Nhara.name = "Rsuke";
Chara chara = Nhara;
printf( "NAME : %s" chara.name );
関数では、このような処理が行われています、
この処理だと、128バイト無駄なメモリを使っていますね。
関数に実体を渡す、これを「実体渡し」といいます。
この関数の場合は、実体渡しでは効率が悪いです、
このプログラムを効率よくするには...
先ほどの参照を行えばいいのです!
早速使ってみましょう。
// キャラクターの名前を表示する関数
void dispName( const struct Chara& chara )
{
printf( "NAME : %s", chara.name );
}
void main(void)
{
Chara Nhara;
Nhara.name = "Rsuke";
dispName( Nhara );
}
constは皆さん知っていますか?
指定された変数の値を変更できなくする修飾子です。
dispName関数では、引数のchara変数の値を変える必要は無いので、
constを指定しています。
これでコピーは行われずに、データのみを参照することが出来、
無駄なコピーが行われません。
ちなみに、組み込み型(intなどの最初からある型)の場合は、
実体渡しのほうが効率的です。
以上、辻でした。
COMMENT