2012-03-07 4 views
1

를 반환 할 수 = 연산자를 오버로드해야 = 나는 몇 가지 예 반환 값 http://www.cprogramming.com/tutorial/operator_overloading.html
, C++ 전문가 오랜 시간 내 친구가 전에 얘기하면서이 참조를 반환하는 것을 발견했다. 또한 예를 들어 STL 소스를 보면 다음과 같은 것을 보았습니다.연산자를 오버로드하는 방법은 인터넷 검색을하는 동안 클래스 및 또는 클래스

vector& 
    operator=(const vector& __x); 

그래서 올바른 방법은 무엇입니까?

BTW 궁금한 점이 있다면 내 친구가 ref를 반환해야하는 이유는 l-value를 반환하는 유형에 내장 된 beause입니다.

int x; 
(x = 3) += 2; 
// x is now 5. 
+3

기본적으로 질문에 대답하고 참조를 반환하십시오. –

답변

5

특별한 경우를 제외하고 실제로는이 무엇인지 알고 있다면 class& 또는 void 중 하나를 반환해야합니다.

반환 class 나쁜 생각이다 (그리고 대부분의 시간, void를 반환하는 것은 단지 "나는 게으른되고있어 돌아 오는 class&이 의미가 있는지 확인하고 주위를 확보하지 못했"에 대한 자리 표시 자이어야 함) 때문에 폐기물 사용자가 반환 값을 사용하지 않는 일반적인 경우에는 시간과 메모리 (복사본을 만듭니다!)는 실제로 반환 값을 사용하는 사용자를 오도하고 (여전히 복사본 만들기 시간을 낭비합니다).

3

예, 자체 참조를 반환해야합니다.

1

메모리와 시간이 모두 절약 될 때 항상 참조를 사용하는 것이 좋습니다. 값으로 전달하면 새 개체를 만들어야합니다. 복사 생성자를 호출해야합니다. 시간은 물론 메모리도 더 비쌉니다. .

값으로 전달되거나 반환되어야하는 매우 강한 필요성이 없으면 항상 참조로 전달하십시오.