• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

13분 25초 10~11번째 줄에 return type이 string& 인 이유는 무엇인가요?

22.01.12 12:29 작성 조회수 148

0

궁금합니다!

답변 1

답변을 작성해보세요.

1

강민철님의 프로필

강민철

2022.01.12

안녕하세요 :)

아마 해보셨을 수도 있겠지만, 참조자를 리턴하지 않는다고 해서 오류가 발생하는 것은 아닙니다.

 

아래와 같이 string을 리턴하도록 작성해도 오류는 발생하지 않지요.

#include <iostream>
#include <string>

using namespace std;

class Something
{
public:
	string m_value = "default";

	const string getValue() const { return m_value; }
	string getValue() { return m_value; }
};

int main()
{
	
	Something something;
	something.getValue();

	const Something something2;
	something2.getValue();

	return 0;

}

다만, 참조자를 리턴할 때와 그냥 String을 리턴할 때에는 차이가 있습니다.

참조자는 (이미 학습하셨는지는 모르겠으나)

같은 메모리 공간을 리턴하는 것이고 (return by reference)

그냥 string을 리턴하면 해당 값이 복사되어 리턴됩니다. (return by value)

 

getValue의 목적이 Something Class의 m_value가 저장한 값만을 받는 것이라면 

String을 리턴해도 무방하겠으나, 

만일 getValue의 목적이 Something Class의 메모리 공간까지 포함한 m_value 그 자체라면 

string reference를 리턴해야 할 겁니다.

 

요는, m_value가 저장한 '값'만을 원한다면 (복사본이라도 괜찮다면)

string을 리턴하든 string & 을 리턴하든 문제는 없으나

m_value '그 자체'를 원한다면 string & 을 리턴해야 합니다.

 

답변이 되었길 바랍니다.

추가 질문이 있으시다면 언제든 댓글 달아 주세요 :)

 

감사합니다.