2014-09-11 2 views
-1
#include<iostream> 
using namespace std; 
class Mybase 
{ 
public: 
    Mybase(int value):my_base(value){ } 
    Mybase& operator++() 
    { 
     Mybase tmp(*this); 
     ++my_base; 
     return tmp; 
    } 
    Mybase operator++(int) 
    { 
     ++my_base; 
     return *this; 
    } 

private: 
    int my_base; 
}; 

접두사 표현식이 정확합니까, 아니면 접미사 표현식이 올바른가요?C++ 접두사 및 접미사 표현

+2

무엇이 당신의 질문입니까? – cdhowie

답변

0

일반적으로 접두사 또는 접미사를 사용할 수 있습니다. 때로는 차이가 있습니다. 표준 스타일은 접두사 양식을 ++i으로 변경하는 것이 효과적이지 않을 때 선호합니다. (이것은 C++라고하는 유명한 언어가 있기 때문에 믿기 어렵지만 ++ C라고 불리는 것은 없지만 거기에 있습니다.)

접두어 형식을 선호하는 이유는 스택 메 커닉과 관련이 있습니다. 이 의미에서 여기

int n = 2 * (++i - 5); 

같은 문을 고려, 변수 i가 다음 사용 증가, 옛 값은 즉시 잊어.

int n = 2 * ((i++) - 5); 

여기서 반대로 고려 i 변수의 값 i 별도로 증가 된 후, 스택에 임시로 복사되어야한다. 이 경우에는 프로세서가 i을 더 듭니다.

은 틀림없이 좋은 최적화 컴파일러는 두 경우 모두에서 동일하게 효율적인 코드를 생성 할 수 있습니다,하지만 ++ii의 이전 값이 즉시 i가 업데이트 될 때, 즉시 관련이되기 때문에, 본질적으로 청소기, 그 후에 아무

없다 최적화 할 수 있습니다. 종종 두 가지 형식 중에서 선택할 다른 이유가 없으므로 ++i이 일반적으로 선호됩니다.

0

다른 방법이 있습니다. 첫 번째 연산자 정의에는 접두사 연산자의 서명이 있지만 접미사 연산자가 구현되고 두 번째 정의에는 접미사 서명이 있지만 접두사 본문이 있습니다. 두 메서드의 본문을 바꿔서 정상적으로 처리되어야합니다.

관련 문제