[Basic C++] #22_참조형 변수
C++ 개발에서 까다로운 문법 혹은 특별한 의미를 갖는 부분에 대해 알아보겠습니다.
"전문가를 위한 C"의 10 항목, "C++의 까다롭고 유별난 부분들"에 해당하는 내용입니다.
참조형 변수
"참조형 변수"란 다른 변수에 대한 별명입니다.
참조형 변수, 즉 어떠한 변수에 대한 참조형 변수의 수정 사항은 모두 기존 변수에 반영됩니다.
참조형 변수를 어떠한 변수의 주솟값 추출, 혹은 역참조 연산이 자동으로 수행되는 포인터 변수라고 생각하면 됩니다.
* 주의 : &는 주소 값을 의미하기도 합니다. 따라서, "자료형 뒤에 오는 &", 즉 참조인지 잘 확인해야 합니다!
1. 예제 코드
// 참조형 변수의 사용
int x = 5;
int& xRef1 = x;
// 컴파일 에러를 발생시키는 코드
int& xRef2; // 컴파일 에러!
int& xRef2 = 5; // 컴파일 에러!
// const 참조형 변수의 사용
cont int& xRef3 = 5; // 정상적으로 컴파일됩니다.
xRef3 = 7; // 컴파일 에러!
"xRef"는 integer 타입의 변수 "x"의 참조형 변수입니다.
먼저, 참조형 변수는 선언 시점에 초기화를 해주어야 합니다. 따라서, 단독으로 선언되어 사용될 수 없습니다.
추가적으로, 숫자와 같이 이름을 갖지 않는 값을 참조할 수 없습니다.
반면, const 참조형 변수는 숫자를 직접 참조하는 것이 가능합니다. 하지만, 이후에 참조형 변수의 값을 변경할 수 없죠.
2. 예제 코드
int x = 5, y = 3;
int& xRef = x;
xRef = y; // x 변수의 값이 3으로 변할 뿐, 참조 대상이 y로 변하지 않습니다.
다음으로, 참조 대상의 변경에대해 알아보겠습니다.
"xRef"는 현재 x를 참조하고 있습니다.
xRef에 y를 대입하는 것은 x변수의 값을 y변수의 값으로 변경할 뿐, xRef의 참조 대상이 x -> y 로 변경되지 않습니다.
마찬가지로, xRef에 yRef 처럼 y의 참조형 변수를 대입해도 결과는 달라지지 않습니다.
결과적으로, 참조형 변수의 참조 대상은 선언 시점에 초기화되면, 이후에 변경할 수 없습니다.
3. 예제 코드 (포인터 변수의 참조)
int* xPtr;
int*& xPtrRef = xPtr;
xPtrRef = new int;
*xPtrRef = 5; // xPtr은 최종적으로 5를 갖는 정수형 타입의 동적 메모리를 가리킵니다.
"xPtrRef"는 정수 타입의 포인터 변수 "xPtr"을 참조합니다.
이처럼 포인터 변수를 참조하는것 또한 가능합니다.
'언어 > Basic C++' 카테고리의 다른 글
[Basic C++] #62_erase(), 주의할 점 (0) | 2023.04.02 |
---|---|
[Basic C++] #29_Set, STL 컨테이너 (0) | 2022.11.19 |
[Basic C++] #28_static 키워드, 링킹, namespace (0) | 2022.10.09 |
[Basic C++] #61_객체 풀, Obejct Pooling (0) | 2022.10.07 |
[Basic C++] #60_스마트 포인터 (0) | 2022.09.28 |