C++ 에서 증감 연산자 오버로딩, 전위, 후위 연산자를 구별하는 방법
참고하면 좋은 곳
Purpose of Dummy Parameter in Postfix Operator Overload? c++
When overloading the postfix operator, I can do something simple like Class Foo { private: int someBS; public: //declaration of pre &postfix++ Foo operator++(); //rest of class not
stackoverflow.com
전위, 후위를 더미로만 구분해서 오버로딩
class Example{
private:
int m_val;
public:
Example operator++();
};
위 예시 클래스에서 증감 연산자를 오버로딩 한다고 하면 아래와 같이 만들어 집니다.
// 전위 연산자
Example Example::operator ++ (){
++m_val;
return *this;
}
// 후위 연산자
Example Example::operator ++ (int){
Example temp(m_val);
++(*this);
return temp;
}
티스토리의 미칠듯한 줄바꿈으로 이상하게 보이지만 증감연산자를 오버로딩할 때 전위의 경우 그냥 operator ++ () 이고 후위 연산자의 경우 operator ++ (int) 같은 int 매개변수가 추가적으로 들어가 있습니다. (매개변수명은 없어도 됩니다, 어차피 더미라서)
일단 저 과정에서 후위 연산자는 보통 이 연산이 끝난 다음 lvalue 값을 +1 이므로 왜 저런식으로 동작하는지는 잘 알 수 있습니다. 그런데 int 같은 더미가 왜 들어가냐는 것이죠.
찾아본 결과 오버로딩시 구분을 위해 컴파일러에게 알려주는 장치라고 볼 수 있습니다. 실제로 함수를 오버로딩할 때 함수의 리턴 타입으로는 오버로딩 구분을 할 수 없습니다. 이로 인해서 ++, -- 의 경우 전위 연산자는 l-value가 리턴, 후위 연산자의 경우 r-value가 리턴이 되므로 오버로딩 과정에서 이 둘을 구별할 장치가 없는 것입니다. 그래서 더미가 있으면 후위 연산자, 없으면 전위 연산자로 구분할 수 있게 해준 것이죠.
실제로 코드로 보면 int가 하는 일은 없기 때문에 단순히 '후위 연산자임을 알려주는 장치'로 사용되었다고 이해하면 될 것 같습니다.