인프런 커뮤니티 질문&답변

열공!님의 프로필 이미지

작성한 질문수

홍정모의 따라하며 배우는 C++

7.5 다양한 반환 값들(값, 참조, 주소, 구조체, 튜플)

강의 8:07 질문

해결된 질문

24.04.15 22:53 작성

·

138

·

수정됨

1

안녕하세요.

 

8:07에서 반환값의 자료형이 int&이니

getValue 함수 안의 value를 선언할 때도 int&로 선언해야 하는 것 아닌가요?
즉, 함수의 반환값과 변수의 자료형을 맞춰야 하는 것이 아닌지 궁금합니다.

답변 1

2

Soobak님의 프로필 이미지

2024. 04. 16. 00:39

안녕하세요, 질문&답변 도우미 Soobak 입니다.

 

int& getValue(int x)
{
  int value = x * 2;
  return value;
}

위 코드의 함수에서 int& getValue(int x) 함수의 반환형은 int& 즉 참조(reference)입니다.
따라서, return value; 는 해당 함수 value 의 참조를 반환하게 됩니다.

이 때, 참조는 기본적으로 어떤 변수의 별명(alias)과 같이 동작하며, 자체적으로 메모리를 소유하고 있지 않고, 다른 변수의 메모리 주소를 참조하기만 합니다.

따라서, 참조는 초기화될 때 메모리에 존재하는 명확한 변수를 가리켜야 합니다.
만약, 말씀하신 것처럼, int& value = x *2;형태로 value 를 선언하면, x * 2 가 생성하는 임시 값에 참조를 직접적으로 연결할 수 없습니다.

 

또한, 여기서 발생하는 기술적인 문제는 "반환타입과 반환되는 값의 유형이 일치하지 않는다." 는 것이 아니라, 해당 강의의 10:00 부분 경 부터 다루어지는 "반환되는 참조가 지역 변수에 대한 참조이므로, 유효하지 않은 메모리를 가리키게 된다" 는 것이라는 점 또한 염두해두시면 학습에 도움이 되실 것 같습니다.

열공!님의 프로필 이미지

작성한 질문수

질문하기