참조자의 반환
여기 글에서는 참조형과 참조에 의한 호출은 생략하겠습니다.
이해하는데 그렇게 어렵지 않고 참조형은 그냥 변수를 여러 별명으로 부르는 방법이기 때문입니다.
다른 블로그나 책을 추천합니다. 참조는 꼭 익히길 바랍니다.
저는 참조자의 반환을 잘 이해하지 못했었기 때문에 이 파트만 다루도록 하겠습니다.
함수에서 참조자를 반환할 수도 있습니다.
참조자를 반환하면 반환 과정에서 복사가 일어나지 않고 참조가 일어납니다.
물론, 이때 반환되는 변수는 함수가 끝나도 자동으로 소멸되지 않아야 합니다.
위의 줄에서??? 가 뜨는 분들을 위해 조금 설명하겠습니다. ヾ(^▽^*)))
괜찮습니다 저도 몰랐거든요. 전 책을 2번째 보고 난 후에 알게 되었어요.
참조 매개변수가 그 값을 복사하는 게 아니고 전달 인자의 별명을 매개변수로 받는다는 걸 아실 겁니다.
그러면 반환하는 것도 비슷합니다.
int& getCount(){
static int count = 0;
count++;
return count;
}
위의 참조자를 반환하는 함수처럼 참조자 int형을 반환하면 이 함수는 정적 지역변수 count의 복사본을 반환하는 것이 아니라 그 변수의 다른 이름을 반환합니다. 이것은 그 변수 자체를 반환하는 것과 동일한 의미입니다.
따라서 다음과 같이 이 함수가 대입 연산자의 왼쪽 피연산자가 될 수 있습니다.
따라서 getCount() = 0과 같이 사용할 수 있게 됩니다.
이와 같은 참조자의 반환은 다음과 같이 다차원 배열의 항목에 간편한 방법으로 접근하기 위한 인라인 함수 등에서 많이 사용됩니다.
int MazeMap[720][1028]
inline int& Map(int x,int y) { return MazeMap[y][x] }
//맵을 0으로 초기화 할려면
for (int y = 0; y<1028; y++)
for (int x = 0; x<720; x++) {
Map(x,y) = 0;
}
참조자는 C++에서 추가로 지원되는 기능으로 포인터만을 사용하던 C언어에 비해 코드를 더 간결하고 이해하기 쉽게
구현할 수 있도록 합니다.