포인터와 참조자의 공통점은 다른 객체(변수)를 간접적으로 참조하는 역할을 하지만
몇가지 차이가 존재하는데, 다음과 같다.
* 참조자는 선언과 동시에 초기화를 해야 한다.
* 초기화 시, 참조자는 값(value)을 직접 입력받고, 포인터는 값(value)의 주소값을 입력받는다.
* 클래스 멤버 접근 시, 참조자는 "."을 사용하고 포인터는 "->"를 사용한다.
* 포인터는 nullptr 값을 가질 수 있지만 참조자는 nullptr 값을 가질 수 없다.
다시 말하면 참조자는 nullptr과 같은 유효검사를 할 수 없다.
이것이 바로 참조대신에 포인터를 사용하는 가장 큰 이유일 것이다.
* 참조자는 한번 가리킨 대상을 변경할 수 없지만, 포인터는 자신이 가리키는 대상을 언제든지 변경할 수 있다.
string oldNumber("100");
string newNumber("200");
string & rs = oldNumber; // 초기화.
rs = newNumber;
참조하는 대상을 변경하는 게 아니라 원래 참조하던 oldNumber객체의 값을 바꾼다.
=> oldNumber의 값이 바뀌게 된다
=> 전달하는 매개변수가 nullptr이 될 수 없으면, 사실 웬만하면 const reference 형태로 하는 것이 좋다.
'프로그래밍 > C++' 카테고리의 다른 글
C++11 재정의규칙과 override (0) | 2016.07.11 |
---|---|
C++11 이동생성자 (Move Constructor) (2) | 2016.07.05 |
C++11 RValue Reference - 우측값 참조 (0) | 2016.07.04 |
C++ Korea와 함께하는 멜팅팟 세미나 동영상 (2) | 2016.06.15 |
C++11 Emplace- SCOTT MEYERS 강의 후기 (0) | 2016.04.29 |