ホームに戻る
参照渡しと参照戻し
#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