• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

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

23.02.12 22:05 작성 조회수 231

0

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

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

답변 1

답변을 작성해보세요.

0

Ambition님의 프로필

Ambition

질문자

2023.02.13

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

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

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