본문 바로가기
C++ STL, 알고리즘

++i vs i++ 누가 일반적인가.

by wanna_dev 2024. 10. 7.

++i와 i++는 둘 다 값을 1씩 증가시키는 역할을 하지만, C++에서 특히 루프에서 ++i가 i++보다 자주 사용되는 이유는 성능과 효율성 때문입니다.

1. ++i vs i++의 차이

  • ++i: 전위 증가 연산자로, 값을 증가시킨 후 증가된 값을 반환합니다.
  • i++: 후위 증가 연산자로, 현재 값을 반환한 후에 값을 증가시킵니다.

두 연산자가 동일한 작업을 수행하지만, i++는 임시 값을 저장하고 반환해야 하므로 추가 작업이 필요합니다.

2. 성능 차이

C++에서 i가 일반 정수형 변수인 경우, 컴파일러가 최적화를 통해 ++i와 i++ 간의 성능 차이를 줄일 수 있습니다. 하지만 클래스나 사용자 정의 타입의 경우는 이야기가 다릅니다. 후위 증가 연산자(i++)는 증가하기 전의 값을 저장해야 하므로, 추가적인 메모리 저장 작업이 발생합니다.

예를 들어, 아래와 같은 클래스가 있을 때:

cpp
코드 복사
class Counter { public: Counter& operator++() { // 전위 증가 ++count; return *this; } Counter operator++(int) { // 후위 증가 Counter temp = *this; ++count; return temp; } private: int count; };

위의 코드에서 operator++(int) 후위 증가 연산자는 temp라는 임시 객체를 만들어 반환해야 하므로 추가적인 복사 연산이 필요합니다. 반면, 전위 증가 연산자인 operator++()는 단순히 값을 증가시켜 반환하므로 더 효율적입니다.

3. 반복문에서 ++i가 선호되는 이유

반복문에서 정수형 변수를 사용하는 경우에는, 최적화가 적용되기 때문에 ++i와 i++의 성능 차이는 거의 없다고 볼 수 있습니다. 하지만 C++ 커뮤니티에서는 전위 증가 연산자 ++i가 효율적이라는 습관적 이유로, 반복문에서도 ++i를 더 많이 사용하는 경향이 있습니다.

 
for (int i = 0; i < n; ++i) { // do something }

또한, 코딩 스타일과 관습 상, 효율적인 코드를 작성하는 습관을 들이기 위해 ++i를 기본으로 사용하려는 경향이 있습니다. 이로 인해 다른 자료형을 사용할 때도 성능 최적화가 잘 유지되는 코드 스타일을 갖게 됩니다.

4. 결론: 언제 ++i를 사용하는가?

  • 일반 변수(예: int)의 경우 성능 차이가 거의 없지만, ++i가 더 일반적이고 효율적인 연산으로 간주됩니다.
  • 사용자 정의 타입(예: 클래스)에서 반복문 변수가 ++ 연산자를 지원하는 경우 **전위 증가 연산자 ++i**가 더 효율적입니다.
  • C++에서는 일반적인 반복문에서 ++i가 좋은 습관으로 여겨지며, 특히 다른 자료형에서 성능상의 장점을 고려하여 권장됩니다.

따라서, 성능 차이가 거의 없는 경우에도 코드 스타일 측면에서 전위 증가 연산자인 ++i를 사용하는 것이 관습적으로 많이 사용됩니다.

'C++ STL, 알고리즘' 카테고리의 다른 글

참조형 &  (0) 2024.10.07
c++ 구조적 바인딩  (0) 2024.10.07
Optional Type  (0) 2024.10.07
가상 베이스 클래스 (다이아몬드 상속 해결)  (0) 2024.10.07
파생 클래스의 복제 생성자와 대입 연산자  (0) 2024.10.07