operator_incdec — 증감 연산자
operator_incdec — 증감 연산자 (Increment/decrement operators)
**증감 연산자(increment/decrement operator)**는 값을 1씩 증가/감소시키는 ++와 -- 연산자예요. 전위(prefix)와 후위(postfix) 두 형태가 있어요.
루프 카운터나 반복자 이동에 흔히 사용해요. 전위와 후위는 값이 달라져요.
출처: cppreference
본문
증감 연산자는 피연산자를 1 증가/감소시켜요.
문법 (Syntax)
++x // 전위 증가
x++ // 후위 증가
--x // 전위 감소
x-- // 후위 감소
전위 vs 후위
- 전위(prefix)
++x— 값을 증가시키고 증가된 결과를 반환해요. - 후위(postfix)
x++— 값을 증가시키지만 증가 이전의 값을 반환해요.
int x = 5;
int a = ++x; // x 는 6, a 는 6 (전위)
int b = x++; // x 는 7, b 는 6 (후위)
반복자와 사용
STL 반복자에서 ++it(전위)는 it++(후위)보다 효율적일 수 있어요(후위는 이전 값을 복사해야 할 수 있음). 관례상 전위 증가가 선호돼요.
for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it) { }
오버로딩
클래스에서 operator++, operator--를 오버로드할 수 있어요. 전위와 후위는 구분돼요.
- 전위:
T& operator++(); - 후위:
T operator++(int);(더미 int 인자)
class Counter {
int n = 0;
public:
Counter& operator++() { ++n; return *this; } // 전위
Counter operator++(int) { Counter c = *this; ++n; return c; } // 후위
};
정수형에서의 주의
int i = 5; i = i++ + ++i;처럼 같은 변수를 순서 없이 수정과 읽는 코드는 정의되지 않은 동작이에요. 같은 객체를 두 번 수정하는 표현을 피해야 해요.
노트 (Notes)
- 후위 연산자는 증가 전 값의 사본을 만들어 내므로 약간의 오버헤드가 있을 수 있어요 (사용자 타입).
- 반복자·포인터에도
++/--를 쓸 수 있어요. - 불필요하게 평가 결과를 사용하지 않으면 전위를 쓰는 게 관례예요.