プログラミング言語において、データそのものではなく、そのデータがメモリ上のどこにあるかをあらわす、メモリアドレスなどの参照情報を保持する型(データ型)の総称です。
あるプログラミング言語で提供されている型のうち、どれが参照型に分類されるかは、その言語の仕様によって異なります。プログラミング言語の多くで、配列やクラス、文字列といったような、複雑なデータを扱う型を参照型としています。一方で、C# は構造体(struct)を参照型とせず、クラス(class)を参照型とする明確な使い分けをしています。
参照型に対して、データそのものを保持する型の総称を、値型と呼ぶことがあります。
参照型は大きなデータを直接扱うのではなく、そのデータへの参照情報だけを扱うため、データをコピーするコストを抑えられる場合があり、効率的に処理できる利点があります。一方で、コピーを行ったときの動作は、値型のようにデータそのものをコピーするのではなく、参照情報をコピーする動作となるため、複数の箇所から同じデータを見ている状態となることに注意が必要です。
C言語には参照型と呼ばれる型は存在しません。
冒頭で解説したような一般的な意味での参照型の動作をC言語で実現するためには、ポインタ型が利用できます。ただし、ポインタ型と参照型はあくまで異なるものであり、ヌルポインタや間接参照、アドレス演算などがポインタに特有の概念として存在しています。
C言語のポインタ型については、C言語編第31章を参照してください。
C++ では、言語が提供する型の分類の1つとして参照型があり、型名に & や && を付加して表され、オブジェクトまたは関数を参照する型のことを指しています。そのため、冒頭で解説したような一般的な意味での参照型とは異なるものとなっており、対比としての値型という呼び方もありません。
C++ の参照型は、さらに lvalueリファレンス(左辺値参照)と rvalueリファレンス(右辺値参照)に分類されます。
C++ の参照型については、新C++編「std::vector」「オブジェクトのムーブ」を参照してください。
Programming Place Plus のトップページへ
| はてなブックマーク に保存 | Facebook でシェア | X で ポスト/フォロー |
| LINE で送る | noteで書く |
|
| 管理者情報 | プライバシーポリシー |