2017-04-23 2 views
0

아래로 캐스팅하는 동안 정적으로 주조하는 방법으로 객체 조각이 생깁니 까? 아래의 경우와 같습니다.C에서 캐스팅하는 동안 객체 조각화

class Parent{ // base class 
public: 
    virtual void draw(); 
}; 

class Child: public Parent{ //derived class 
public: 
    void draw() 
    { 
     static_cast<Parent>(*this).draw(); 
     // do other stuff 
    } 
}; 
+1

당신이'dynamic_cast는 을 찾고 계십니까

... (이) -> 무승부()'? 이 경우 [비 가상 인터페이스 관용구] (https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Non-Virtual_Interface) (Effective C++의 Item 34)를 적용 할 수 있습니다. –

+0

암시 적 업 캐스트 (Parent :: draw())를 수행하면 문제가 해결되었습니다. –

+2

그것은 암묵적인 상영이 아니며, 어떤 종류의 캐스트도 아닙니다. 방금 정식 이름으로 호출합니다. – StoryTeller

답변

1

당신의 다운 캐스팅이 아닙니다. 당신의 업 캐스팅 (정렬)입니다.

그리고 static_cast<Parent>(*this)Parent 개체를 새로 작성하므로 을 복사하면 조각이 발생합니다.

[expr.static.cast/1]

발현 static_cast의 결과 (V)을 입력하기 식 (V)를 변환 한 결과는 다음 C++ 표준으로 당

Parent{*this}.draw(); 

: 이것은 다음과 본질적으로 등가의 T. 만약 T가 좌변 치의 참조 형 또는 rvalue의 함수형의 참조라면, 결과는 좌변 치가됩니다. T가 객체 유형에 대한 rvalue 참조 인 경우 결과는 x 값입니다. 이면 결과는입니다. static_cast 연산자는 constness를 버리지 않습니다.

[basic.lval/1.2] ...

  • prvalue 누구 평가 객체 또는 비트 필드를 초기화 식, 또는 조작자의 피연산자의 값을 계산 로 표시됩니다.
관련 문제