>백엔드 개발 >C++ >C에서 `static_cast`와 `dynamic_cast`의 차이점은 무엇입니까?

C에서 `static_cast`와 `dynamic_cast`의 차이점은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-04 01:42:11325검색

What's the Difference Between `static_cast` and `dynamic_cast` in C  ?

C의 동적 캐스팅과 정적 캐스팅

C의 Dynamic_cast 및 static_cast 개념은 특히 다형성 클래스를 다룰 때 혼란스러울 수 있습니다. 이러한 개념을 더 잘 이해하기 위해 높은 수준의 관점에서 해당 C 개념을 고려해 보겠습니다.

static_cast<>

static_cast<> C에서의 작업은 안전한 컴파일 타임 캐스트입니다. 대상과 소스 유형이 관련되어 있는지 확인하여 데이터 손상을 방지합니다. 유형이 관련되지 않으면 컴파일 오류가 발생합니다.

아래 예에서 static_cast<> 작업은 기본 클래스에 대한 포인터를 파생 클래스에 대한 포인터로 안전하게 캐스팅합니다.

class B {};
class D : public B {};
D* d = new D;
B* b = static_cast<B*>(d); // Safe compile-time cast

dynamic_cast<>

static_cast<>와는 달리,dynamic_cast< > 런타임 캐스트입니다. 포인터의 실제 유형이 대상 유형과 일치하는지 런타임에 확인합니다. 기본에서 파생으로(B2D) 클래스와 파생에서 기본으로(D2B) 클래스 캐스팅을 모두 처리할 수 있습니다.

D2B 캐스트의 경우 Dynamic_cast<> 캐스트가 유효하지 않은 경우 단순히 NULL 포인터를 반환합니다. 그러나 B2D 캐스트의 경우 클래스 계층 구조는 다형성을 지원해야 합니다. 즉, 기본 클래스에 하나 이상의 가상 함수가 정의되어야 합니다.

다음 예에서 Dynamic_cast<> 기본 클래스에 대한 포인터를 파생 클래스에 대한 포인터로 안전하게 캐스팅하는 데 사용됩니다.

class Base { virtual void DoIt() = 0; };
class Foo : public Base {};
class Bar : public Base {};
Base* base = new Foo;
Foo* foo = dynamic_cast<Foo*>(base); // Safe run-time cast

base가 실제로 Bar 객체를 가리키는 경우, Dynamic_cast<> 작업은 NULL을 반환합니다. 이는 유형 안전성을 보장하고 정의되지 않은 동작을 방지합니다.

위 내용은 C에서 `static_cast`와 `dynamic_cast`의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.