C++ 프로그래밍/함수

참조자의 반환

같은편 2022. 7. 21. 17:46

여기 글에서는 참조형과 참조에 의한 호출은 생략하겠습니다.

이해하는데 그렇게 어렵지 않고 참조형은 그냥 변수를 여러 별명으로 부르는 방법이기 때문입니다.

다른 블로그나 책을 추천합니다. 참조는 꼭 익히길 바랍니다.

저는 참조자의 반환을 잘 이해하지 못했었기 때문에 이 파트만 다루도록 하겠습니다.


함수에서 참조자를 반환할 수도 있습니다.

참조자를 반환하면 반환 과정에서 복사가 일어나지 않고 참조가 일어납니다.

물론, 이때 반환되는 변수는 함수가 끝나도 자동으로 소멸되지 않아야 합니다.

 

위의 줄에서??? 가 뜨는 분들을 위해 조금 설명하겠습니다. ヾ(^▽^*)))

괜찮습니다 저도 몰랐거든요. 전 책을 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언어에 비해 코드를 더 간결하고 이해하기 쉽게

구현할 수 있도록 합니다.