2017-12-12 3 views
1

아래와 같이 여러 매개 변수로 연산자 + 오버로드를 수행하고 있습니다.여러 매개 변수를 사용하여 오버로드 연산자 +에서 const 참조를 전달하는 이유

컴파일 할 수 없으며 "연산자 +와 일치하지 않음"을 반환 할 수 없습니다. 나는 다중 매개 변수 ((a + b) + c)의 알고리즘을 읽고 이해한다. 왜 효과가 없습니까?

friend Integer operator+ (const Integer & a,const Integer & b){ 
    Integer I (a.value+b.value); 
    return I; 
}; 

그리고

friend Integer & operator+ (Integer & a,Integer & b){ 
    Integer I (a.value+b.value); 
    return I; 
}; 

하지만 이유를 잘 모릅니다 : 그러나, 나는 그것이 작동되도록하는 두 가지 방법을 발견했다.

friend Integer operator+ (Integer & a, Integer & b) 
//      ^^^^^^^^^ ^^^^^^^^^ 

ab좌변 참조 있습니다 : 당신에게 당신의 operator+ 서명에

+1

오버로드 된 연산자의 [표준 형식] (http://en.cppreference.com/w/cpp/language/operators)에 대해 읽어보십시오. 그것은 모두 잘 정의되어 있으며 잘 문서화되어 있습니다. – Useless

답변

8

봐 주셔서 감사합니다.


당신이

Integer d = a+b+c; 

a+bInteger&에 결합하지 않는 유형 Integer,의 를 rvalue을 생산 쓸 때.


const 좌변 참조로 const Integer & 작품과 버전 모두 lvalues ​​우변에 바인딩 할 수 있습니다.

0

제 해당 임시 객체와 함께 coperator + 호출 임시 Integer 객체를 생성한다 a과 함께 boperator +를 호출 a+b+c; 실행. operator +을 두 번 호출하는 것은 임시 개체를 const가 아닌 개체에 대한 참조로 전달할 수 없으므로 불가능합니다.

오브젝트가 변경되지 않았기 때문에 비 const 참조를 허용하도록 operator +을 선언하는 것은 어쨌든 이해가되지 않습니다.

관련 문제