전체 페이지뷰

2014년 10월 21일 화요일

C++ 참조자 소멸에 관하여

반환형이 참조형인 함수에서

참조자의 소멸에 대해 정확히 이해하자.









반환형이 int& 이고 매개변수를 int &ref로 받는 Reference 라는 함수가 정의되어있다.
(ref 값을 1증가 시킨후에 참조자 ref를 반환한다.)

메인 함수 

"참조형 반환 1" 부분을 먼저 보도록하자.

int &n2 = Reference(n1) 에서 n2는 Reference 함수에서 반환된 참조변수를 참조하게된다. 다시말해, n2 는 ref가 참조하고 있는 n1을 참조하는것과 같다.
따라서 n1과 n2의 값은 같기때문에 "참조형 반환 1" 의 결과를 보면 n2++ 를 했을때 n1의 값과 n2의 값이 함께 증가함을 알 수 있다.

다음

"참조형 반환 2" 부분을 보도록하자.
int p2 = Reference(p1) 으로 정의된 부분이다. Reference 함수에서 반환된 참조변수 ref를 int형 변수 p2에 저장하였다. 참조자가 아닌 일반 변수를 선언하여 반환값을 저장하여도 된다는 것을 알 수 있다. 이렇게 된다면 "참조형 반환 1" 과는 다르게 p1과 p2는 각각 별개의 저장공간과 값을 가진 변수가 된다. p2++후 출력결과를 보면 p1 과 p2 각각 다르게 값을 가지는것을 알 수 있다.


결론 :
반환형이 참조형인 함수를 이용했을때, 반환된 값을 어떻게 저장하느냐에 따라 결과가 다른 상황이 발생한다. 그러므로 잘 생각하여 사용하도록 하자.




처음 예제와는 다르게 반환형이 int 형인 함수를 정의하였다. RefEx() 함수를 통해 얻게된 반환값을 각각 int val2, int &val3 에 저장하였다. 그랬더니 &ref 에서 에러가 발생.



에러 문구는 "int에서 int &로 변환 할수 없다"
당연하다 RefEx() 함수를 통해 반환된 값 int형을 가진 ref는
참조자 ref가 아니라
참조자 ref가 가리키는 변수 val1의 값이다.

따라서 int val2 변수에는 저장이 가능하지만
int &val3 에는 저장이 불가능 하다.
왜냐면 int &val3 = 10 이 된단소린데, 상수(number)는 const형태가 아닌이상 참조자로 선언 할 수 없다.











댓글 없음:

댓글 쓰기