변수와 참조자를 동시에 선언할 필요가 있겠는가?
int num = 20;
int &ref = num;
이는 학습을 위한코드이다.. 참조자의 활용에는 함수가 큰위치를 차지한다.
Call-by-value & Call-by-reference
- Call-by-value 값을 인자로 전달하는 함수의 호출방식
- Call-by-reference 주소 값을 인자로 전달하는 함수의 호출방식
참조자를 이용한 Call-by-reference
void SwapByRef2(int &ref1, int &ref2)
{
int temp=ref1;
ref1=ref2;
ref2=temp;
}
- 위 와 같이 c++ 에서는 Call-by-reference 구현 방법에 참조자를 이용하는 방법과 주소 값을 이용하는 방법, 이렇게 두가지가 상존한다.
- 참조자 (Reference) 를 사용하면 매개변수를 바꿀수 없다. (포인터는 가능)
- 문법도 달라진다.
참조자를 이용한 Call-by-reference의 황당함과 const 참조자
int num=24;
HappyFunc(num);
cout<<num<<endl;
C 언어의 관점에서 위에 코드는 24를 출력하지만 C++ 의 참조자로 인해 함수가 어떻게 정의되어있는가에 따라 무슨값이 출력될수 없다.
- 위와 같은 문제를 해결하기 위해 변경되지않는 reference 는 const 를 붙혀준다. (그러면 참조자를 왜씀 …..?????)
위와 같은 단점 때문에 참조자를 잘 쓰지 않는 C++ 프로그래머들도 있다고 한다.
반환형이 참조형(reference type)인 경우
int& RefRetFuncOne(int &ref)
{
ref++;
return ref;
}
- 짜증나는 기본형과 참조형 반환값 문제가 나오는데 다루지 않겠다. 의미 없다.
잘못된 참조의 반환