Herb Sutter's article 먼저 회원 빼기 - 할당 연산자를 구현 한 다음의 측면에서 비 멤버 빼기 연산자를 구현하기 위해 우리를 가르친다.
class fraction
{
long num;
long den;
public:
fraction& operator-=(const fraction& rhs)
{
[[Underlying operations]]
return *this;
}
};
inline fraction operator-(fraction lhs, const fraction& rhs)
{
lhs -= rhs;
return lhs;
}
멤버 빼기-할당 연산자는 객체 자체를 수정 한 다음의 규칙으로 참조 자체를 돌려 :
그래서,이 같은 일을 제안합니다.
비회원 빼기는 새 값을 만들어야하기 때문에 왼쪽에서 값을 취합니다. const 값은 우리가 방금 관찰 한 것처럼 좌변 치 참조에 의해 구합니다. 뺄셈은 실제로 뺄셈 할당 연산자에 의해 수행됩니다. 값으로 lhs를 반환합니다.
참조로 로컬 개체를 반환하지 마십시오. 그렇게하는 것은 정의되지 않은 동작입니다. 객체가 함수보다 오래있을 때만 참조로 반환합니다. 멤버 빼기 - 할당 연산자.
lvalue 관련 문제에 대해 언급 했으므로 const 왼쪽 값 참조 (const T&
)는 lvalue와 rvalue를 모두 참조 할 수 있지만 lvalue가 아닌 왼쪽 참조 (T&
)는 lvalue 만 참조 할 수 있습니다. 자세한 내용은 인터넷에서 "lvalue"및 "rvalue"및 "lvalue reference"및 "rvalue reference"를 조회하는 것이 좋으며 복잡 할 수 있습니다. 패스에 의해 값 반환 값 최적화 및 기타 문제에 관한 disfavouring 코멘트와
은 또한 const를 참조 좌를 복용 고려하고 로컬 복사본을 만들 수 있습니다.
inline fraction operator-(const fraction& lhs, const fraction& rhs)
{
fraction local_copy = lhs;
local_copy -= rhs;
return local_copy;
}
'인라인 분수 :: operator + (const 분수 & f) const' –
표현할 연산자는 무엇입니까? – juanchopanza
아마도 연산자에'const'를 덧붙이기를 원할 것입니다. – Niall