전위는
Foo& Foo::operator++(void)
{
//Do something here
return *this;
}
후위는
const Foo Foo::operator++(int)
{
const Foo ret = *this;
++(*this);
return ret;
}
대개 이렇게 구현되는데,
보통의 컴파일러들은 이들을 최적화할 때, 두 가지를 고려하는데,
첫째는 함수 인라인화,
둘째는 반환 값 최적화(RVO).
이 Foo란 객체에 전위/후위연산자가 호출이 되면,
보통 전위/후위연산자 함수 코드가 길지 않기 때문에 인라인화를 하게 되는데,
특히 후위연산자가 호출 되었을 때에는,
반환값이 필요하지 않은 경우에 const Foo ret = *this;구문과 return ret; 구문을 생략하고,
그 자리에 operator++(void)를 인라인화 시키면서 operator(int)도 인라인화 하기 때문에
결국엔 후위연산자의 반환값이 필요 없는 경우에는,
사용자 정의 형에서도 전위/후위 연산자도 똑같은 부하를 갖게 된다.
ㅇㅇ
심심하구나너
그런듯
어차피, 컴파일러가 가장 최적화로 최적화 시켜줘서 돌려주지 않음 ?
그걸 머라고 하더라 - -^ 뭐라 카든데, 수업시간에 배웠는데
심심하구나너 (1)