ホームに戻る
 参照渡しと参照戻し

#include <iostream>

/*
*
*   参照渡しと参照戻し
*
*   参照の扱いはポインタに似ているが、
*   ポインタが自らのアドレスと参照値を変更できるのに対し、
*   参照は参照値のみを変更できる。
*
*   また要素へのアクセス方法についても、
*   ポインタのように -> を用いず . を使う。
*
*   参照は必ず参照先を指定して初期化時にしか定義できない。
*   これは値のアドレス参照に使う & と区別するためである。
*
*/

int &f(int& c){
  static int d = 2;

  c = 1;

  return d;
}

int main(){
  int a = 0;
  int &b = f(a);

  std::cout << a << std::endl;
  std::cout << b << std::endl;

  b = 3;  // 関数 f の d に 3 を書き込んでいる。
          // プログラム上は混乱を招くため、
          // 関数 f の戻り値は const int& とすべきである。
          // こうすると const int &b でないと値を受け取れなくなり、
          // b = 3 と書くとエラーになる。

  int &e = f(a);

  std::cout << e << std::endl;

  const int &g = 4;
  int h = g;  // 参照は値に対しては参照する値を返します。
              // このとき h は const ではありませんがエラーではありません。

  std::cout << h << std::endl;

  return 0;
}

実行結果

1
2
3
4

inserted by FC2 system