Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 람다사용정렬
- 언리얼엔진구조체
- 프로그래머스
- C++
- 정렬
- UE4 커스텀로그
- C++최적화
- 알고리즘
- BFS
- 데이터애셋
- 약참조
- UELOG
- 언리얼가비지컬렉터
- 자료구조
- 강참조
- stl
- 애셋로드
- dataasset
- UE_LOG
- moreeffectiveC++
- 크리티컬섹션
- enumasByue
- 람다
- 스마트포인터
- 델리게이트
- map
- unorder_map
- UML관련
- 선택정렬
- 정렬알고리즘
Archives
- Today
- Total
기억을 위한 기록들
[CPP-effective] 2-5 대입 연산자는 *this의 참조자를 반환하게 하도록 본문
C++의 대입연산은 재미있는 성질이 있다.
int x,y,z;
x=y=z=15; //사실처럼 연결된다.
또 하나의 재미있는 특성으로 우측 연관(right-associative)연산 이라는 점이다.
즉, 위의 대입 연산 사슬을 분석하게 되면
x = ( y = ( z = 15));
위와 같이 된다. 이렇게 대입 연삱이 사슬처럼 엮이려면 대입연산자가 좌변 인자에 대한 참조자를 반환하도록 구현되어 있을 것이다. 이런 구현은 일종의 관례로 클래스에서 대입연산자를 만들게 된다면
class Player{
pulbic:
Player& operator=(const Player& rhs)
{
//..내용
return *this;
}
};
"좌변 객체의 참조자를 반환하게 만들자"라는 규악은 위에서 단순 대입형 말고도 모든 형태의 대입연산자에서 지켜져야 한다.
class Player{
pulbic:
Player& operator+(const Player& rhs)// +=,-=,*= 등 연산자에도
{
//..내용
return *this;
}
Player& operator=(int rhs) //대입연산자의 매개변수 타입이 일반적이지 않더라도
{
//..내용
return *this;
}
};
관례로 위와 같은 방식을 사용하지 않아도 컴파일이 되긴한다. 하지만 이 관례는 모든 기본 제공 타입들이 따르고 있을뿐만 아니라, 표준 라이브러리에 속한 모든 타입(string, vector 등)에서도 따르고 있다는 점은 무시하지 못한다.
정리
* 대입연산자는 *this의 참조라르 반환하도록 만드세요.
'C & CPP > Effective C++' 카테고리의 다른 글
[CPP-effective] 2-7 객체의 모든 부분을 빠짐없이 복사하자. (0) | 2021.03.30 |
---|---|
[CPP-effective] 2-6 operator=에는 자기대입에 대한 처리를 빼먹지 말자. (0) | 2021.03.30 |
[CPP-effective] 2-4 객체 생성/소멸 과정 중에는 가상함수를 호출하지말자. (0) | 2021.03.22 |
[CPP-effective] 2-3 예외가 소멸자를 떠나지 못하도록 붙들어 놓자.(보류) (0) | 2021.03.15 |
[CPP-effective] 2-2 다형성을 가진 클래스의 소멸자는 반드시 가상 소멸자로 선언하자. (0) | 2021.03.11 |