Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- operator=
- 암시적인터페이스
- Directx9
- c++
- 멤버함수템플릿
- rcsp
- 도우미함수
- contextswitching
- 해골책
- 암시적변환
- 교차dll문제
- 일반화복사생성자
- 이른진단
- fvf
- 정점버퍼
- private상속
- most vexing parse
- 부분복사
- 스택풀림
- EffectiveC++
- effectivec++.
- 템플릿
- sharedptr
- uniqueptr
- 제네릭프로그래밍
- 상수객체참조
- 가상기본클래스
- RAII
- 복사함수
- 게임프로그래밍
Archives
- Today
- Total
성공할 게임개발자
[Effective c++] 10. 대입 연산자는 *this의 참조자를 반환하게 하자 본문
대입연산은 우측 연관 연산이다.
int x, y, z;
x = y = z = 15; //대입이 사슬처럼 이어짐
// x = (y = (z = 15));
위의 코드를 풀어 보면, 15가 z에 대입되고 대입 연산의 결과(갱신된 z)가 y에 대입된다. 또 y에 대한 대입 연산의 결과(갱신된 y)가 x에 대입되는 것이다.
대입연산자가 좌변 인자에 대한 참조자를 반환하도록 구현된건 관례(convention)다.
class Widget{
public:
...
Widget& operator=(const Widget& rhs) //반환 타입은 현재의 클래스에 대한 참조자
{
...
return *this; //좌변 객체의 레퍼런스를 반환
}
...
}
좌변 객체의 참조자를 반환하게 만들자 라는 규약은 위에서 본 단순 대입형 연산자(=) 말고도 모든 형태의 대입 연산자에서 지켜져야한다. (+=, -=, *= 등에도 동일한 규약)
관례라서 무조건적인건 아니지만, 모든 기본제공 타입들 뿐만아니라 표준라이브러리에 속한(string, vector complex, tr1::shared_ptr)도 이러한 관례를 따르고 있다.
중요포인트!
대입 연산자는 *this의 참조자를 반환하도록 만들자
'C++' 카테고리의 다른 글
[Effective c++] 12. 객체의 모든 부분을 빠짐없이 복사하자 (1) | 2025.05.27 |
---|---|
[Effective c++] 11. operator=에서는 자기대입에 대한 처리가 빠지지 않도록 하자 (0) | 2025.05.26 |
[Effective c++] 9. 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자 (2) | 2025.05.25 |
[Effective c++] 8. 예외가 소멸자를 떠나지 못하도록 붙들어 놓자 (0) | 2025.05.25 |
[Effective c++] 7. 다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자 (0) | 2025.05.24 |