가이 코드를 가지고 경고를 제공dynamic_cast는 <B *>이 (가)
#include <iostream>
class A
{
virtual void func() {}
};
class B : A
{
void func() {}
};
int main()
{
A a;
B* b;
b = dynamic_cast<B *> (&a);
if (b == NULL)
{
std::cout << "Bad cast" << std::endl;
}
}
코드는 내가 예상 (캐스트가 실패)하지만 난 이해하지 못하는이 컴파일러 경고를 같이 동작
nullptr.cc:18:28가 : 경고 : 내가 사용하여 객체를 할당 할 경우 '클래스 B *'에서 'A A'의 dynamic_cast는이
[기본적으로 활성화되지] 성공할 결코 "새"가있다 경고가 없습니다. dynamic_cast가 &을 포인터로 인식하지 못하는 이유는 무엇입니까?
아마도 그렇 겠지만 일부 정적 분석은 a가 A 유형이 아니므로 캐스트가 항상 실패한다는 것을 알 수 있습니다. 이러한 분석은 새로운 것을 사용하는 경우에도 동일하게 수행하기에 충분하지 않을 수 있습니다. – Borgleader
그 말이 맞는 것 같아요. 내가 놓친 일부 미묘한 언어가있을 수도 있다는 걱정이있었습니다. –