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

Ambition님의 프로필 이미지
Ambition

작성한 질문수

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

9.3 단항 연산자 오버로딩 하기

단항 연산자 오버로딩에서 return 부분에 질문이 있습니다.

해결된 질문

작성

·

286

0

Cents operator-() const
	{
		return Cents(- cents_);
	}

저 리턴부분에서 임시객체인 Cents를 빼도 정상적으로 -가 붙어서 출력이 나오는데요. 왜 굳이 임시 객체를 통해서 반환해 줘야 하나요? 인스턴스를 만들면 this가 자동으로 호출이 되니까 Cents를 빼고 return this->(-cents_); 또는 return -cents_; 를 해줘도 멤버변수를 그대로 리턴해줄 수 있지 않나요??

답변 1

1

Ambition님의 프로필 이미지
Ambition
질문자

https://dydtjr1128.github.io/cpp/2019/08/10/Cpp-RVO(Return-Value-Optimization).html

스스로 해결하였기 때문에 답변 안주셔도 됩니다. 또한, 다른 사람들도 궁금해 할 수도 있기 때문에 이 게시글은 지우지 않겠습니다.

결론부터 말하자면, 멤버함수에서 객체를 반환할 때 멤버변수를 임시객체에 대입해주지 않으면 묵시적 형변환으로 복사 생성자가 호출되면서 최적화가 안된다고 합니다. 그러나, 릴리즈모드에서는 임시객체로 대입해서 RVO(Return Value Optimization)해주거나 멤버변수 그대로 리터해줘서 NRVO(Named Return Value Optimization)을 해줘도 차이가 없다고 합니다.

Ambition님의 프로필 이미지
Ambition

작성한 질문수

질문하기