参照型

こちら を参照してください


const に続いて、こっちも型を拡張する機能だよ。

変数名の前にこのように & をつけ、同じ型の変数で初期化すると、

int body = 0;
int &ref = body;

変数に対して、それを 参照する型 の変数を作れる。

言い換えると、変数の純粋な別名になって、変数を間接的に変更できる。

int body = 0;
int &ref = body;

ref = 3;
body; // これも 3 になる

body = 2;
ref; // これも 2 になる

& は変数名の前につける。

だから、同時に宣言する場合はこうなる。

int body = 0, &ref = body;
// body は int 型で、ref は int& 型になる

参照の伝播

参照型変数に入っている参照は、さらに別の参照型変数に渡せる。

つまり、参照は又貸しできちゃう。

int body = 1;
int &ref = body;
int &ref_ref = ref;

参照の引数

引数にした場合、関数の外にある変数を直接変更できる。

int write_2(int &target) {
  target = 2;
}

int main() {
  int number = 0;
  write_2(number);
  numer; // 2
}

ちなみに、std::cin もこれを利用して変数に書き込んでいる。

#include <iostream>

int main() {
  int input;
  std::cin >> input; // input の参照を渡している
}