변수의 또 다른 이름(별명)을 컴파일러에게 알려주는 것이다.
참조자 정의하는 법 : 가리키고자 하는 타입 뒤에 &
를 붙여준다.
반드시 선언과 정의를 동시에 해줘야 한다.
참조자는 한번 어떤 변수의 참조자가 돼버리면 더 이상 다른 변수를 참조할 수 없게 된다.
#include <iostream>
int main()
{
int a = 2;
int &ref_a = a;
std::cout << "a : " << a << std::endl;
std::cout << "ref_a : " << ref_a << std::endl;
a = 3;
std::cout << "a : " << a << std::endl;
std::cout << "ref_a : " << ref_a << std::endl;
ref_a = 4;
std::cout << "a : " << a << std::endl;
std::cout << "ref_a : " << ref_a << std::endl;
return 0;
}
🖥️ 출력
a : 2
ref_a : 2
a : 3
ref_a : 3
a : 4
ref_a : 4
위의 결과에서 보듯이, a
에서 바꾸든 ref_a
에서 바꾸든 같은 변수를 참조하기 때문에 값이 똑같이 변하는 것을 알 수 있다.
컴파일러에게 새로운 별명을 알려주는 것이기 때문에 결국 똑같은 주소
를 가지고 있다고 생각하면 편하다.
참조자의 특이한 특성으로는, 포인터와는 달리 메모리
상에 존재하지 않을 수도 있다.
포인터보다 안전
하다.#include <iostream>
int main()
{
int a = 2;
int b = 5;
int &ref_a = a;
std::cout << "a : " << a << std::endl;
std::cout << "ref_a : " << ref_a << std::endl;
ref_a = b;
std::cout << "a : " << a << std::endl;
std::cout << "ref_a : " << ref_a << std::endl;
return 0;
}
🖥️ 출력
a : 2
ref_a : 2
a : 5
ref_a : 5
위의 코드처럼 ref_a = b
를 하게 되면 새롭게 b
를 참조하게 되는 것이 아니라 b
의 값이 ref_a
에 대입된다.
출처
[C++]참조자는 왜 쓰는걸까?, https://80000coding.oopy.io/ddcdbb4d-461a-4a64-97b8-5040fc49c7d6, (2022. 3. 18.)