* 참조값을 리턴할 때,
호출자가 리턴값을 어떻게 받느냐에 따라 그 리턴값이 참조로 쓰일지 복사된 값으로 쓰일지 결정된다
ㄴ 리턴이 값(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) |
'IT공부' 카테고리의 다른 글
[ETC] 자바는 JVM 생략 OK, C#은 왜 .NET까지 묶일까? (0) | 2025.04.10 |
---|---|
[C++] const T&(읽기 전용 참조), T&&(우변 참조, 이동 가능) (0) | 2025.03.22 |
[운영체제] 시스템 콜(System Call) (0) | 2025.02.27 |
[C] C언어 전역변수, static 변수 vs Java static 변수 (0) | 2025.02.11 |
[C] 문자열 함수 (0) | 2025.02.01 |