언어/C++

[C++] 전위 연산자(++i) vs 후위 연산자(i++) 성능 차이?

CodeHunst 2024. 2. 29. 13:11

전위 연산자(++i)와 후위 연산자(i++)는 모두 i += 1을 수행하지만

전위 연산자는 1이 증가된 값을, 후위 연산자는 1이 증가하기 전 값을 반환한다.

 

여기서, 후위 연산자는 연산이 이뤄지기 전 값을 저장하기 위해 임시 변수를 만든다.

따라서 i++이 ++i 보다 느릴 것이라 생각했지만...

 

요즘 컴파일러들은 최적화가 잘 되어 i++이든 ++i 이든 똑같이 나온다.

하지만 이는 일반적인 변수에서 그렇고

i가 클래스의 인스턴스의 경우 차이가 있다.

 

Foo& Foo::operator++()   // called for ++i
{
    this->data += 1;
    return *this;
}

Foo Foo::operator++(int ignored_dummy_value)   // called for i++
{
    Foo tmp(*this);   // variable "tmp" cannot be optimized away by the compiler
    ++(*this);
    return tmp;
}

 

후위 연산의 경우 복사 생성자를 실행시켜 임시 변수를 만들고 반환하는 데,

이때 복사생성자가 컴파일러에 의해 자동으로 최적화 되지 않는다.

 

결론 : 특별한 이유가 있는 거 아니면 전위 연산자를 사용하도록 하자.

 

 

[참고]

https://ebongzzang.github.io/c++/c++%EC%97%90%EC%84%9C%EC%9D%98-%EC%A0%84%EC%9C%84%EC%97%B0%EC%82%B0%EC%9E%90postfix%EC%99%80-%ED%9B%84%EC%9C%84%EC%97%B0%EC%82%B0%EC%9E%90suffix%EC%9D%98-%EC%84%B1%EB%8A%A5-%EC%B0%A8%EC%9D%B4/

 

C++에서의 전위연산자postfix와 후위연산자suffix의 성능 차이

원본글: Is there a performance difference between i++ and ++i in C++?

ebongzzang.github.io

 

https://durai.tistory.com/98

 

컨테이너 순환문에서는 전위 증가 연산자를 사용하자

링크 : 어셈블리 기본 int i = 0;int iPrefix = ++i;// 전위연산int iPostfix = i++;// 후위연산 해당 코드의 결과는 프로그래머라면 누구나 알 수 있을 것이다. 그런데 두 연산자는 속도의 차이가 있을까? 필자

durai.tistory.com

 

https://stackoverflow.com/questions/24901/is-there-a-performance-difference-between-i-and-i-in-c

 

Is there a performance difference between i++ and ++i in C++?

We have the question is there a performance difference between i++ and ++i in C? What's the answer for C++?

stackoverflow.com

 

'언어 > C++' 카테고리의 다른 글

[C++] STL - 연관 컨테이너  (0) 2024.05.12
[C++] Struct 와 Class 의 차이  (0) 2024.03.09
[C++] 표준 템플릿 라이브러리 (STL)  (0) 2023.12.31
[C++] new와 delete  (0) 2023.12.19
[C++] 레퍼런스(reference, 참조자)  (0) 2023.12.16