아래 코드를 준수하십시오. 내가 아는 한 dynamic_cast는 static_cast보다 느립니다. 그것은 런타임에 타입을 평가하기 때문입니다. 여기에 typeid()와 함께 static_cast를 사용하면 동적 캐스트와 동일한 시간이 걸릴까요? dynamic_cast보다 빠릅니까? RTTI와static_cast 및 RTTI vs dynamic_cast
class Shape
{
public:
virtual ~Shape(){}
};
class Circle : public Shape{ };
class Square : public Shape{ };
정적 캐스트 :
Circle c;
Shape* s = &c; // Upcast: normal and OK
// More explicit but unnecessary:
s = static_cast<Shape*>(&c);
// (Since upcasting is such a safe and common
// operation, the cast becomes cluttering)
Circle* cp = 0;
Square* sp = 0;
// Static Navigation of class hierarchies
// requires extra type information:
if(typeid(s) == typeid(cp)) // C++ RTTI
cp = static_cast<Circle*>(s);
if(typeid(s) == typeid(sp))
sp = static_cast<Square*>(s);
if(cp != 0)
cout << "It's a circle!" << endl;
if(sp != 0)
cout << "It's a square!" << endl;
동적 캐스트 :
Circle c;
Shape* s = &c; // Upcast: normal and OK
s = &c;
Circle* cp = 0;
Square* sp = 0;
cp = dynamic_cast<Circle*>(s);
if(cp != 0)
cout << "It's a circle!" << endl;
sp = dynamic_cast<Square*>(s);
if(sp != 0)
cout << "It's a square!" << endl;
이것은 개체에 대한 포인터를 참조하는 경우에만 작동합니다. 그런 다음'typeid'는'Circle *'과'Shape *'을 다시주는 대신 동적 유형의 객체와 함께 작동합니다. –
안녕하세요 Pileborg, 귀하의 제안에 감사드립니다, 나는 단지 그들 사이의 시간 차이를 알고 싶습니다. 미리 정의 된 기능으로 확인하겠습니다. – ranganath111
다시 시도해보고 다시보고하십시오. –