2010-05-10 2 views
1

I이 몇 동적 캐스팅, 유형 ID (에 관한 질문) 및 템플릿 유형 ID, 동적 캐스팅 (업 캐스팅) 및 템플릿

1

) 어떻게 유형 ID는 RTTI를 필요로하지 않는 거지?

다형성 유형 2) dynamic_cast는 :

내가 RTTI와 파생 풀이 죽은 (자료)를 할
  • - 컴파일이 RTTI가 꺼져있을 때

    통과 - 나는 경고가 (C4541 경고 : '/GR-와 CBase ''다형성 유형에 사용되는 'dynamic_cast는, 나는 업 캐스팅 (또는 RTTI없이) 자료를 파생 할 때 예기치 않은 동작이)

  • 을 발생할 수 있습니다 - 컴파일이 원활하게
전달

내가 이해할 수없는 것은 내가 업 캐스트를하고 RTTI가 꺼져있는 이유입니다. 경고/오류가 발생하지 않습니다.

비 다형성 유형 3) dynamic_cast는 :

내가 또는 RTTI없이 낙심 할
  • - 컴파일 (오류 C2683 실패 : 'dynamic_cast는': 'CBase'이 아닙니다 다형성 타입)

하지만

  • 내가 또는 RTTI없이 업 캐스팅 할

    는 - 컴파일이 원활하게 전달합니다.

어떻게 RTT가없는 NON 다형 유형 전달에서 upcast가 있습니까?

4) 템플릿 함수 앞에있는 '인라인'은 효과가 있습니다. 즉, 컴파일러가 함수를 컴파일하고 '인라인'임을 확인하면 함수가 실제로 인라인으로 처리되거나 무시됩니다.

는 지원 데이비드

답변

2

1)는 RTTI를 필요로하지 주셔서 감사합니다. 적어도 다형 클래스에서 사용하고 있다면 ... 실제로 그 용도입니다.

2) dynamic_cast에 RTTI가없는 경우 사용자가 전송중인 객체가 실제로 전송할 객체 유형인지 확인할 수 없습니다. 이것은 dynamic_cast (근본적으로)와 static_cast의 차이점입니다. Static_cast는이를 확인하지 않으므로 안전성이 떨어지지 만 빠릅니다. 따라서 RTTI가 없다면 다운 캐스팅 할 때 동적 캐스트를 수행 할 수 없습니다.

업 캐스팅은 컴파일 타임에 유형을 결정할 수 있기 때문에 안전합니다. 따라서 기본 클래스에 대한 dynamic_cast로 업 캐스팅 할 수 있습니다.

3) dynamic_cast 다운 캐스팅은 polymorhic 유형 (예 : 가상 함수가있는 유형)에 대한 것이므로 클래스가 다형성이 아니면 작동하지 않습니다. 따라서 CBase에 가상 함수가 없으면 dynamic_cast를 사용할 수 없습니다.

업 캐스팅에 대해 2와 같은 이유.

다른 캐스트가 무엇인지 조금 읽어야한다고 생각합니다.

http://www.cplusplus.com/doc/tutorial/typecasting/

4) 네, 그것은 인라인으로 컴파일됩니다.