: 어떠한 이유에서 복사 생성자, 복사 대입연산자 만들 때,
const &를 사용하는지를 확실히 알아야 함.
참조 형태로 선언해야 함.
값을 불가함.
그림
-> Point p를 Point p3으로 보자.
이게 가능하다고 한다면? call 되는 형태를 보면,
Point p1(1,1);
Point p2(p1);
1) 복사 생성자의 매개변수로 객체가 전달되고, Point p2(Point p3 = p1)이 되고,
엇.. p3 = p1을 의 경우는 p2(p1) 처럼 다시 또...
Point p3(Point p3 = p1)??
2) 그러면 다시 복사 생성자가 호출되는 형태임.
3) 결과 : 복사 호출이 재귀적으로 발생하게 됨.
: foo의 경우, 임시객체, 즉 rvalue값을 반환하고 있음.
rvalue는 lvalue 참조로 받을 수 없기 때문임.
-> 따라서 lvalue 뿐 아니라, rvalue 도 받을 수 있는 const ref 를 사용해야 함.