C++에서 ++ 연산자는 전위(prefix) 방식과 후위(postfix) 방식 두 가지로 사용할 수 있으며, 이 둘은 동작 결과에 중요한 차이가 있습니다.
전위 증가(++i)와 후위 증가(i++)의 차이
- 전위 버전(++i): 변수
i의 값을 먼저 1 증가시킨 후, 그 표현식의 값은 증가된 새로운 값이 됩니다. 즉, '먼저 증가하고, 그다음 값을 반환'합니다. - 후위 버전(i++): 변수
i의 값은 1 증가하지만, 그 표현식의 값은 증가하기 전의 원래 값입니다. 즉, '먼저 기존 값을 반환하고, 그다음에 증가'합니다.
예제 코드
코드를 통해 더 명확하게 이해해 보겠습니다.
#include<iostream>
using namespace std;
int main() {
int x = 3, y, z;
y = x++;
z = ++x;
cout << x << ", " << y << ", " << z;
return 0;
}실행 결과
5, 3, 5
결과 분석
왜 이런 결과가 나오는지 단계별로 살펴보겠습니다.
- 1단계: 변수
x를 3으로 초기화합니다. - 2단계:
y = x++;— 후위 증가이므로, 증가하기 전의 값인 3이y에 대입된 후x는 4가 됩니다. - 3단계:
z = ++x;— 전위 증가이므로,x가 먼저 5로 증가한 후 그 값인 5가z에 대입됩니다. - 4단계: 최종적으로
x,y,z의 값인 5, 3, 5가 출력됩니다.
정리 및 성능 팁
요약하면, ++i는 증가 후의 값을 반환하고, i++는 증가 전의 값을 반환합니다. 특히 C++에서 정수형뿐 아니라 반복자(iterator) 같은 객체에 대해 증가 연산을 수행할 때는, 후위 버전이 임시 객체를 추가로 생성해야 하므로 불필요한 오버헤드가 발생할 수 있습니다. 따라서 반환되는 값을 사용할 필요가 없다면 전위 증가(++i)를 사용하는 것이 일반적으로 더 효율적입니다.