-
C++ 에서 증감 연산자 오버로딩, 전위, 후위 연산자를 구별하는 방법쾌락없는 책임 (공부)/C++ 짜잘이 2022. 1. 11. 22:40반응형
참고하면 좋은 곳
전위, 후위를 더미로만 구분해서 오버로딩
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가 하는 일은 없기 때문에 단순히 '후위 연산자임을 알려주는 장치'로 사용되었다고 이해하면 될 것 같습니다.
반응형'쾌락없는 책임 (공부) > C++ 짜잘이' 카테고리의 다른 글
C++ make_pair vs {} (0) 2022.03.06 C++ fill_n vs memset, 무슨 차이가 있을까 (0) 2022.02.28 C++ pimpl과 관련한 이야기들 (0) 2022.02.16 C++ 구조체, 클래스 패딩 (0) 2022.01.24 cout 과 문자열 포인터 (0) 2021.12.27