Search
Duplicate
🔣

참조 변수 (Reference Variable)

간단소개
참조 변수 (Reference Variable)
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
C++
Scrap
태그
c++
9 more properties

참조 변수 (Reference Variable)

참조 변수는 C++에서 새로 추가된 변수이다.
변수의 또 다른 이름으로서 사용 한다.
내부적으로 포인터와 동일하게 동작 한다.
포인터처럼 동작하지만, 포인터 문법이 아닌 일반 변수의 문법을 사용 한다.
& 기호를 사용하여 선언 한다.
#include <iostream> int main() { int num = 42; int* numPTR = &num; int& numREF = num; std::cout << &num << std::endl; std::cout << numPTR << std::endl; std::cout << &numREF << std::endl; std::cout << num << std::endl; std::cout << *numPTR << std::endl; std::cout << numREF << std::endl; return 0; }
C++
복사
아래 사진은 참조, 포인터의 선언 및 사용에 대한 디스어셈블리 결과이다.
참조와 포인터의 내부 동작이 동일한 것을 확인할 수 있다.

참조와 포인터의 차이

1.
편의성
참조 : 일반 변수처럼 사용 한다.
포인터 : 포인터 전용 문법(’→’, ‘*’)을 사용 한다.
2.
초기화
참조 : 선언과 동시에 초기화가 필수 이다.
포인터 : 초기화가 필수는 아니다.
3.
NULL 포인터 사용
참조 : NULL 포인터를 값으로 가질 수 없다.
포인터 : NULL 포인터를 값으로 가질 수 있다.
4.
재할당
참조 : 다른 변수로 재할당이 불가능 하다. (const 처럼)
포인터 : 다른 변수의 주소로 값 변경이 가능 하다.

참조의 용도

1.
함수 매개 변수
참조를 함수의 매개 변수로 사용하면, call by address로 동작 한다.
call by address로 동작하므로, 매개 변수의 값 복사 비용이 들지 않는다.
2.
함수 반환 자료형
참조를 함수의 반환 자료형으로 사용하여, return by address처럼 동작 가능하다.
포인터가 주소를 반환하는 것처럼, 참조하고있는 객체의 주소를 반환 한다.

참조와 포인터 중 어떤거 쓰지?

Team By Team or 사바사.. 정해진 답은 없다.
객체가 없는 경우도 고려해야 한다면 “포인터”. (NULL 체크 필수)
read only로 사용한다면 “const 참조”.
편의성을 생각한다면 “참조”.
원본을 바꾼다는 의미를 명확히 나타내고 싶은 경우 “포인터”.
“참조” 사용시 컴파일러 최적화 부분의 장점도 있다고 한다. (inline으로 대체..? 잘 모르겠다.)