IT공부

[C++] 참조값 리턴

shine94 2025. 3. 22. 11:11

* 참조값을 리턴할 때,

   호출자가 리턴값을 어떻게 받느냐에 따라 그 리턴값이 참조로 쓰일지 복사된 값으로 쓰일지 결정된다

   ㄴ 리턴이 값(int)이면 무조건 복사됨 → 호출자가 참조로 받을려고 해도 안됨

   ㄴ 리턴이 참조(int&)일 때만 → 호출자가 참조로 받을 수도 있고 복사로 받을 수도 있음

 

int RefFuncOne_2(int& ref)
{
    ref++;
    return ref;
}

 

* 기본 리턴 타입이 int일 때,

   리턴값 자체가 참조가 아니므로 참조로 받으려고 하면 컴파일 에러 발생

int a = 10;

// 1. 복사로 받음
int result = RefFunc(a);  // a는 11, result는 복사된 11
result++;                 // a는 그대로 11, result는 12

// 2. 참조로 받음
int& result2 = RefFunc(a);  // 오류!
// 리턴 타입이 'int'니까 'int&'로 받을 수 없음

 

* 리턴 타입이 int&일 때,

   리턴을 참조로 했기 때문에, 참조로 받아야만 원본에 계속 영향을 줄 수 있다

int a = 10;

// 1. 값으로 받음
int result = RefFunc2(a);   // a는 11, result는 복사본 11
result++;                   // a는 그대로 11

// 2. 참조로 받음
int& result2 = RefFunc2(a); // a는 12, result2는 a를 참조
result2++;                  // a는 13, result2도 13

 

🔔 결론 요약

함수 리턴 타입 호출자에게 받는 방식 영향
int (값 반환) int result 복사됨 (원본 영향 X)
int (값 반환) int& result ❌ 컴파일 오류
int& (참조 반환) int result 복사됨 (원본 영향 X)
int& (참조 반환) int& result 원본과 연결됨 (원본 영향 O)