Programming/C,C++

참조리턴

충남대이적 2022. 2. 23. 15:30

참조리턴

참조리턴은 함수의 반환값을 반환할 때 참조를 사용해 리턴하는 것을 말합니다.

함수에서 객체나 값을 반환할 때 복사되어져서 전달되게 되는 데 이런 불필요한 복사를 막을 수 있어 효율적인 프로그램을 만들 수 있는 방법입니다. 간단한 예시를 통해 참조리턴을 이해해보도록 하겠습니다.

 

1) 값 전달 방식(참조를 사용하지 않은 경우)

참조를 사용하지 않은 경우 위와 같이 add함수안에서만 생명력을 가지는 변수 n이 생성됩니다. 그리고 반환을 할 때도 n의 값을 전달하는 방식입니다.

 

2) 참조를 통한 전달(매개변수에만 참조를 사용한 경우)

참조를 통한 효율적인 전달

참조로 매개변수를 받으면 a라는 변수의 별명이 n으로 추가되는 것입니다. 그래서 1번 방식에서의 불필요한 복사생성을 안해도 되는 장점이 있지만, 값 변경이 목적이 아니라 단순히 비교만을 위한 경우에 참조로 전달하게 되면 원본이 바뀔 수 있다는 단점이 있습니다(이런 경우 const를 활용하여 위 문제를 사전에 차단합니다)

 

const를 이용해 원본이 바뀌는 상황을 사전에 차단하기

3) 참조를 통한 반환

1번 방식과 꽤나 유사합니다. 1번 방식과 다른 점은 이름을 반환했다는 것이 다릅니다. 

 

이 코드를 보면 add함수에서 n의 이름을 반환했으므로 n공간의 별명이 ra가 됩니다. 하지만 n의 생명력은 add함수 안에서만 있는 것이므로 n은 사리지게 되고 ra에도 쓰레기 값이 들어가게 됩니다. 참조리턴이 아니었다면 9번문장은 실행되기도 전에 컴파일 오류가 나는것이죠.

4)참조를 통한 값 전달과 반환

C언어에서는 볼 수 없는 독특한 코드입니다. 함수의 매개변수를 참조로 전달했고 또 이름을 반환했기 때문에 함수에 값이 대입될 수 있는 것이죠. 하지만, 이 예시는 참조리턴을 잘 이해하기 위해서 구성된 예시이고 좋지 않은 코드라서 const로 이런 코드를 사전에 차단합니다.

'Programming > C,C++' 카테고리의 다른 글

[C, C++] Make  (1) 2025.10.10
오버라이딩을 통한 다형성의 실현(virtual 개념, 오버라이딩 개념)  (0) 2022.03.01
복사생성자  (0) 2022.02.23
연산자 중복  (0) 2022.02.22
static 멤버(정적멤버)  (0) 2022.02.21