언어/C++

[C++] 레퍼런스(reference, 참조자)

CodeHunst 2023. 12. 16. 19:24

레퍼런스 = 다른 객체 또는 값의 별명

타입 뒤에 &를 붙임으로써 선언할 수 있다.

{

int x = 10;

int& ref_x = x;

ref_x = 1;

}

이때 x = 1, ref_x = 1 을 갖게된다.

 

포인터와 유사하지만 다르다!

 

- 레퍼런스는 반드시 선언과 동시에 초기화해야 한다.

{

int* p; -----> O

int& ref;  ----> X

int& ref = a;  ---> O

}

 

- 초기화 후 다른 변수를 참조하도록 변경할 수 없다.

{

int& ref = a;

ref = b;   ----->   변수 a 에 b가 대입된다 (a=b;)

}

 

- 레퍼런스는 메모리 상에 존재하지 않을 수 있다.

컴파일러에서 참조자를 변수로 바꿔치기 하면 되니까!

 

- 참조자는 함수의 매개 변수로 가장 많이 사용된다.

void change_val(int &n)

{

    n = 1;

}

int main()

{

    int a = 3;

    change_val(a);

    return 0;

}

---> a=1이 된다.

이때 복사본이 만들어지지 않아, 비용을 감소시킬 수 있다.

 

가능하다면 reference를 사용하고, 어쩔 수 없다면 포인터를 사용하자!

&나 *을 사용하지 않아 코드의 가독성이 좋아지고, 포인터를 사용하다 일어나는 실수를 방지할 수 있다.

NULL포인터가 허용될 때만 포인터를 사용.