C++의 전위 증감연산자와 후위 증감연산자는 동작 방식이 아예 다르다. 기본적으로 증감 연산자에 대한 원리는 다음과 같이 이루어진다.
c++
1 2 3 4 5
int prefix_num = 10; int prefix = ++a; //prefix_num = 11 prefix = 11
int postfix_num = 10; int postfix = a++; //postfix_num = 11 postfix = 10
이렇듯 증감을 언제수행하냐의 차이도 보여지지만 내부적인 동작이 다르다. 컴파일러 코드를 C로 풀어서 쓰면 다음과 같다.
Prefix
c
1 2 3
intprefixAdd(int num) { return num + 1; }
Postfix
c
1 2 3 4 5
intpostfixAdd(int num) { int ret = num; ret = ret + 1; return ret; }
그럼 이제 다음과 같은 코드가 어떻게 동작할지 이해할 수 있다.
c++
1 2 3 4 5 6 7 8 9 10
#include<stdio.h> voidfunc(int a, int b){ printf("%d %d\n", a, b); } intmain(int argc, char** argv){ int n = 10; func(++n, n++); n = 10; func(n++, ++n); }