It's just like pok    version4


operator=

 | 

개인적으로 연산자 오버로딩을 무지 싫어하나 이것들이 잘 구현된 라이브러리들은… 역시 편하다-_-

end의 행렬클래스도 연산자 오버로딩을 하려고, 다른 행렬클래스들을 살펴보았는데, 허걱.=이 붙은 계열의 오버로딩은 모두 참조를 리턴하는게 아니던가! 궁금하던 차에 사수격인 회사동료분께 물어봤더니, 아주 명쾌한 해설을 해주셨다.

operator=를 오버로딩해서 호출이 되면, lhs = rhs 꼴은 lhs.operator=(rhs) 형태로 된다. 만일 a=b=c를 수행한다고 하면, a.operator=( (b.opeator=(c) ) 가 된다. 그런데, a=b=c 는 Primative Type을 기준으로 a는 b와 같은 값이 되어야 하고 그렇게 되기 위해서 b.operator=(c)는 b를 참조형으로 던져야 한다. 또한 a = a (a=b)=c일 경우도 있을수 있으므로(멍청하게 저렇게 쓰지는 않겠지만, 참조형으로 엮여서 저렇게 된다는지) const를 붙이지 않는 참조형으로 반환해야 한다.

라이브러리를 만든다는것은 정말 쓸모 없는 재발명일수도 있지만, 배우는 입장에서는 무척이나 좋은 경험같다.


프로그래밍 하드보일드