연산자 중복정의를 배우는 중 개념이 이해가 안되어서 질문올려요.
전위 후위 연산자를 연산자 중복정의를 할때 둘의 차이에 대해서 잘 모르겠는데요
전위 후위에 구분을 위해서 전위
같은 경우에는 인자로 아무것도 없지만
후위는 int인자를 받는데 구분을 위해서 저렇게 정의 한다는 것은 이해가 갑니다.
그런데 인자로 뭘 받냐 안받냐 차이로
AAA객체 뒤에 ++가 뒤에 오는지 앞에 오는지 이것을 어떻게 구분해서 컴파일 한다는 것인지 잘 모르겠네요
인자로 int를 받게 되는 경우 ++가 뒤에 오는 것에 대한 정의가 되는 것 같은데 왜 그런지 알려줄 수 있나요?
class operator 함수 자체는 일반적인 개념을 그냥 클래스에도 적용시키게 한거고, 그 외로 ++value랑 value++가 차이나는 이유는 cout ++value이면 value값에 먼저 1더하고 출력하고 cout value++면 value출력하고 value에 1더하게 된 코드임
내부적인 요소까지 가면, cout<<++value자체는 value값의 복사본을 만들고 1더한 걸 value로 바꾸고 출력하는거. value++면 value값에 복사본을 만들고 기본 value를 출력. 이후 value의 복사본에 1더하고 그 복사본을 value로 쓰는 걸로 알고 있음
value자체에 복사본을 만들지 않으면 포인터 써야되는 거고.. 같은 주소 안에서 사용되니까..
제가 궁금한 것은 중복 정의 할때 인자를 주냐 안주냐에 차이가 어떤 방식으로서 (++AA)와 (AA++)의 형태를 구분 지을 수 있냐는 거에요. 실제로 ++을 앞에 준 형태(++AA)는 중복정의로서 정의 내린 구문을 잘 수행하고 있고, ++을 뒤에 준 형태인 (AA++)도 서로 충돌하지 않고 각자 개별적으로 잘 동작하고 있습니다. 제 기준으로는 인자하나 준 것으로 operator함수를 호출할때 AA클래스 어디에 위치하냐에 대한 차이를 명시하는 것 같지는 않아 보여서 질문을 한 것입니다.
다른 분들 얘기를 들어보니 컴파일러가 그렇게 설계를 한 약속이라고 하는 것 같습니다.