1-17-2. 戻り値としての参照

公開日: 0:34 1. 基本編/1-17. 参照/1-17-2. 戻り値としての参照


C++プログラムはポインタではなく参照を使うと管理と読むことが容易になります。C++関数はポインタと同様に参照を返すことができます。

関数が参照を返す場合、返ってくるのは戻り値への暗黙的なポインタとなります。この時、関数は代入文の左側に使われます。次のプログラムを見てみましょう。
#include <iostream>
#include <ctime>
 
using namespace std;
 
double vals[] = {10.1, 12.6, 33.1, 24.1, 50.0};
 
double& setValues( int i )
{
  return vals[i];   // i番目の要素への参照を返す
}
 
// プログラムの開始
int main ()
{
 
   cout << "変更前の値" << endl;
   for ( int i = 0; i < 5; i++ )
   {
       cout << "vals[" << i << "] = ";
       cout << vals[i] << endl;
   }
 
   setValues(1) = 20.23; // 2番目の要素を変更
   setValues(3) = 70.8;  // 4番目の要素を変更
 
   cout << "変更後の値" << endl;
   for ( int i = 0; i < 5; i++ )
   {
       cout << "vals[" << i << "] = ";
       cout << vals[i] << endl;
   }
   return 0;
}

上のコードをコンパイルし実行すると、次の結果が得られます。
変更前の値
vals[0] = 10.1
vals[1] = 12.6
vals[2] = 33.1
vals[3] = 24.1
vals[4] = 50
変更後の値
vals[0] = 10.1
vals[1] = 20.23
vals[2] = 33.1
vals[3] = 70.8
vals[4] = 50

参照を返す場合、参照されるオブジェクトがスコープの外に出ないよう気をつけてください。そのため、ローカル変数の参照を返すことはできません。ただし、静的変数の参照は返すことができます。
int& func() {
   int q;
   //! return q; // コンパイルエラー
   static int x;
   return x;     // xはスコープ外でもなくならないので問題なし
}
  • ?±??G???g???[?d????u?b?N?}?[?N???A

0 件のコメント :

コメントを投稿