C++

2013-03-03, cpp

参照

C++の「参照」とは、アドレス値を変更できないポインタで、自動的に*演算子が適用されるもの、とあります。以下の例のようにポインタと似た使い方ができます。「アドレス値を変更できない」という特徴のため、元の変数(下記ではdt)の別名(エイリアス)のような役割を持たせることができます。

int dt = 100;
int& r = dt; // 参照
int* p = &dt; // ポインタ
std::cout << "r=" << r << ", p=" << *p << std::endl;

また、ポインタと同様に関数の引数に用いることもできます。ただし、参照を引数に取る場合、&演算子を用いずに「ref( r );」などと直接記述できるため、値渡しと見かけ上の区別が付けにくくなります。そこで、やはり「引数の値を変更する場合は、ポインタ渡しを利用し、変更がない場合はそれを明確にするため、constを付ける」というルールが用いられることが多いようです。

void ref(const int& dt)
{
  std::cout << "dt=" << dt << std::endl;

}

最後は少し変な例。参照と言っても(アドレス値を変えようとしなければ)ポインタと同じですので、以下のような妙な記述も出来てしまいます。どう役に立つのかは不明ですが…。

int& myfunc()
{
  static int ans;
  return ans;
}

int main(int argc, const char * argv[])
{
  myfunc() = 200;
  std::cout << "myfunc=" << myfunc() << std::endl;
}

参考URL

新Visual C++6.0入門 ビギナー編

この記事は役に立ちましたか?