: 후위 연산자는 객체를 복사 받고 반환하므로, 2번의 생성, 소멸이 발생함.
-> 전위의 경우는 참조로 반환하므로, 속도가 빠름.
하지만, 최적화되어 있어서 후위로 해도 된다고 함.
#include <stdio.h>
#include <iostream>
using namespace std;
class Point
{
private :
int x_, y_;
public :
Point() = default;
Point(int _x, int _y) : x_(_x), y_(_y){}
void Print() const { cout << x_ << " " << y_ << endl; }
// 후위 연산자.
Point operator++(int)
{
Point p1(*this);
++x_;
++y_;
return p1;
}
// 전위 연산자.
Point& operator++()
{
++x_;
++y_;
return *this;
}
};
int main()
{
Point p1(1, 1);
//====전위 증감 연산====
++p1;
p1.Print();
//int n; ++++n; 가능함. => 값 반환의 경우, 임시객체를 만드므로, 참조타입을 반환해야 함! : 책 참고.
++++p1;
p1.Print();
//====전위 증감 연산====
//====후위 증감 연산====
p1++;
p1.Print();
//n++++; 의 경우, 컴파일 에러이므로 const를 멤버 함수에 붙여야 하지만, 굳이!
p1++++;
p1.Print();
//====후위 증감 연산====
//int n = 0;
//++++n;
//n++++;
}