, 할당 연산자는 다음 형태 중 하나를 가질 수언제 할당 연산자가 const T &, T & or T를 반환해야합니까? 이 <a href="http://www.cplusplus.com/articles/y8hv0pDG/" rel="nofollow noreferrer">article</a> 따르면
(1) MyClass& operator=(const MyClass& rhs);
(2) MyClass& operator=(MyClass& rhs);
(3) MyClass& operator=(MyClass rhs);
(4) const MyClass& operator=(const MyClass& rhs);
(5) const MyClass& operator=(MyClass& rhs);
(6) const MyClass& operator=(MyClass rhs);
(7) MyClass operator=(const MyClass& rhs);
(8) MyClass operator=(MyClass& rhs);
(9) MyClass operator=(MyClass rhs);
- 폼 (2), (5), (8) 낙담 할당 연산자 수정하지 않아야하기 때문에 그것 매개 변수. 이것이 필요한 경우를 생각할 수 없습니다.
- 양식 (3), (6) 및 (9)는 복사 스왑 이디엄에 유용합니다.
- 필자는 (7) - (9)는 const 개체 (구성 후 변경되지 않음)에만 사용해야한다고 생각합니다. 그 맞습니까?
내 질문은 : 나는 어떤을 사용해야하는 경우 유형 MyClass
, MyClass &
또는 const MyClass &
을 반환?
(2), (5), (8)은 "이동 의미론"과 같은 것을 구현하는 데 필요합니다. – Scheff
[이 정규 지정 연산자 참조] (http://en.cppreference.com/w/cpp/language/operators#Assignment_operator) : "정규 복사 할당 연산자는 ... 참조로 lh를 반환 할 예정입니다." . 또한 * copy * 대입 연산자는 rhs를 수정해서는 안되기 때문에 상수에 대한 참조가되도록해야합니다. 값으로 전달하는 것은 때로는 유용 할 수 있지만 (이전에 링크 된 참조 에서처럼) 유용 할 수 있습니다. –
@Scheff 아니, 당신은'operator = (MyClass &&)'를 생각하고있다. 질문은'operator = (MyClass &)'입니다. – hvd