레퍼런스 = 다른 객체 또는 값의 별명
타입 뒤에 &를 붙임으로써 선언할 수 있다.
{
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포인터가 허용될 때만 포인터를 사용.
'언어 > C++' 카테고리의 다른 글
| [C++] 전위 연산자(++i) vs 후위 연산자(i++) 성능 차이? (0) | 2024.02.29 |
|---|---|
| [C++] 표준 템플릿 라이브러리 (STL) (0) | 2023.12.31 |
| [C++] new와 delete (0) | 2023.12.19 |
| [C++] 네임스페이스(namespace) (0) | 2023.12.16 |
| C언어와 C++ 차이점 (0) | 2023.08.27 |