●레퍼런스(Reference)
- 'int &a' 처럼 &를 사용해서 변수를 생성는 것이 레퍼런스이다.('&'는 사용되는 위치에 따라 주소값을 반환 할수도 있고 레퍼런스를 선언할때 사용할 수도 있다.)
- 변수는 메모리 공간에 할당된 이름을 의미한다. 레퍼런스는 이름 있는 메모리 공간에 하나의 이름을 더 붙여주는 것이다.
- 레퍼런스와 변수는 생성되는 방법만 다르고 일단 생성되고 나면 동일한 것이다.
- 아래 두 함수는 동일한 의미를 지닌다
ex)
int function()
{
int a;
int &b=a;
return a;
}
int function()
{
int a;
int &b=a;
return b;
}
●레퍼런스 선언
- 변수는 새로운 메모리 공간에 이름을 부여하지만 레퍼런스는 반드시 이미 이름을 지니고 있는 메모리 공간에 레퍼런스 이름을 부여해야한다.
- 따라서 레퍼런스값에는 상수가 올 수 없고 변수 이름이 와야한다.
- 레퍼런스는 선언과 동시에 반드시 초기화되어야 한다.
ex)
int a=10;
int &b=10 (x) //레퍼런스는 상수값으로 초기화 할 수 없다.
int &c=a (o)
int &d; (x) //레퍼런스는 선언과 동시에 초기화 해야한다.
●레퍼런스 call by reference
- 함수 내에서 외부에 존재하는 변수에 직접 접근을 하기 위해 reference를 사용한다.
ex)
- 함수의 인자를 레퍼런스로 받고 있다. val1, val2 메모리 공간에 레퍼런스로 선언한 a,b가 메모리 이름으로 붙게 된다.
●간혹 실수로 레퍼런스의 값을 변경해서 원본 값 변경될 때가 있다. 이것을 방지하기 위해 레퍼런스 선언 앞에 'const'를 붙여줘서 레퍼런스를 상수화 해준다. 그러면 레퍼런스 값 변경을 통해서 데이터가 조작되지 않는다. 만약 실수로 조작하는 코드가 삽압되면 에러 메시지가 발생한다.
●지역변수는 레퍼런스로 리턴해선 안된다. 함수가 끝나면 지역변수도 사라져 버리기 때문이다.
ex) reference를 잘못 사용한 예제
#include <iostream>
int& function()
{
int a=16;
return a;
}
int main(void)
{
int &ref=function();
std::cout<<ref<<std::endl;
getchar();
return 0;
}
'프로그래밍 > c++' 카테고리의 다른 글
c++ 클래스(class) 2 (0) | 2013.06.17 |
---|---|
c++ 클래스(class) 1 (0) | 2013.06.16 |
c++ 네임스페이스(namespace) (0) | 2013.06.12 |
c++ 매크로 함수, 인라인(inline) 함수 (0) | 2013.06.12 |
c++ 디폴트 매개 변수 (0) | 2013.06.12 |
댓글