본문 바로가기

Language/C++

[C++] Reference(&) - 컴도리돌이

728x90

Reference(&)

 

Reference는 Pointers와 매우 유사하게 사용된다. 포인터보다는 강력하지는 않지만 사용하는 데는 안전하다.


Passing by Reference to Constant

 

-> function call 후에도 instance가 변경되지 않고 남기기 위해 사용

-> argument의 copying을 피하기 위해 사용

-> 유효한 instance의 reference가 보장하기 위해 사용


Defferences between Pointer & Reference

 

1. 포인터는 초기화를 하지 않아도(uninitialized) 사용할 수 있지만, reference는 초기화를 시켜주지 않으면 error가 나기 때문에 반드시 초기화를 시켜줘야 한다(initialized).

 

int* pa; // OK

int& rb; // error!

int b= 10;
int& rb= b; // OK

 

2. 포인터는 재할당을 시켜줄 수 있다. 하지만 reference는 재할당을 시켜줄 수 없다. 밑에 예시처럼 r은 a로 할당시켜주고 다음 줄에 r=b를 하여도 b에 대한 referencing 되지 않는다. 단지 b의 값을 a에 copy만 해준다.

 

int a =1, b= 2;
int* p;
p = &a;
p = &b;


int a = 1, b= 2;
int&r = a;
r= b; // not refencing b, just copy value of b to a

r = 100;
cout << a << " " << b << " " << r << endl;
100 2 100

 

3. 포인터는 null object (NULL or nullptr in C++11)를 가리키게 초기화시켜줄 수 있다. 하지만 reference는 null object로 대체할 수 없다.

 

int* p = NULL; //OK

int& r = NULL; // error