• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

<< 오버로딩 시 const 유무에 따른 문제

20.04.05 17:40 작성 조회수 157

0

안녕하세요 실습을 해보면서 << 연산자 오버로딩시

와 같이 Digit에 const 가 없으니

<< 가 처음도 아닌 중간에서 에러가 났습니다.

const 를 붙여주니 이 에러가 없어졌는데

어떤 이유에서 그런지 궁금합니다.

아래는 에러 코드 입니다.

Error C2679 binary '<<': no operator found which takes a right-hand operand of type 'Digit' (or there is no acceptable conversion)

답변 2

·

답변을 작성해보세요.

0

skf346님의 프로필

skf346

2022.10.15

d++의 경우

Digit operator ++ (int)

{

Digit temp(m_digit);

++(*this);

return temp;

}

에서 반환하는 값은 기본적으로 rvalue입니다. pointer나 reference 반환을 하지 않는 이상 함수를 호출한 expression에 return by value가 rvalue로 "잠시" 대체 되는 것입니다. d++앞에 주소를 확인하기 위해 &를 붙여보면 rvalue임을 확인할 수 있습니다.

rvalue의 경우에는 함수 parameter가 reference로 받을 때(pass by reference)는 const를 꼭 붙여주어야 합니다. 따라서 << 연산자 오버로딩 함수의 Parameter에서 const를 꼭 붙여주어야 하는 것입니다.

const reference는 rvalue의 수명을 연장시켜 준다고 합니다. 이와 관련해서는 아래링크를 통해 확인할 수 있습니다! https://stackoverflow.com/questions/36102728/why-is-it-allowed-to-pass-r-values-by-const-reference-but-not-by-normal-referenc?newreg=af09de2f1d8d479ca830d2af2a5cb732

0

오버로딩의 시그니처가 원 함수의 시그처와 동일해야한다는 문법에서부터 생각을 전개해나가시면 되겠네요.