목록

Reference_ 참조자

int a = 3;
int& another_a = a;

어떻게 보면 참조자와 포인터는 상당히 유사한 개념이다. 포인터 역시 다른 어떤 변수의 주소값을 보관함으로써 해당 변수에 간접적으로 연산을 수행할 수 있기 때문. 하지만 레퍼런스와 포인터는 몇 가지 중요한 차이점이 있다.

레퍼런스와 포인터의 차이점

#include <iostream>

int change_val(int &p) { 
//p가 정의되는 순간은 change_val(number)로 호출할때 이므로 가능하다.
  p = 3;

  return 0;
}
int main() {
  int number = 5;

  std::cout << number << std::endl;
  change_val(number);
  std::cout << number << std::endl;
}

💡 C++ 문법 상 참조자의 참조자를 만드는 것은 금지되어 있음

💡 std :: cin 은 reference로 받아서 scanf처럼 변수 앞에 &를 명시하지 않아도 됨

상수에 대한 참조자

int &ref = 4; 

error C2440: 'initializing' : cannot convert from 'int' to 'int &'

상수값 자체는 리터럴이기 때문에 위와 같이 레퍼런스로 참조하면 리터럴의 값을 바꾸는 행위가 가능하게 됨. 따라서 C++ 문법 상 상수 리터럴을 일반적인 레퍼런스가 참조하는것은 불가능하게 되어있음

const int &ref = 4;
int a = ref; // a = 4