새소식

인기 검색어

CS/C++

C++ 의 캐스팅

  • -

C++에서는 네 가지 유형의 캐스트 연산자가 있으며, 각각은 서로 다른 목적과 사용 사례에 대해 설계되어 있다.

이들 캐스트 연산자는 타입 변환을 수행하며, 특정 캐스트 연산자는 추가적인 런타임 검사를 제공한다.

 

static_cast:

static_cast는 컴파일 타임에 타입 변환을 수행한다.
관련된 타입 간의 변환에 사용된다(예: 기본 타입 간의 변환, 상속된 클래스 간의 포인터 변환).

float f = 10.5;
int i = static_cast<int>(f);  // float에서 int로 변환

reinterpret_cast:

reinterpret_cast는 바이트 레벨에서 타입 변환을 수행한다.
서로 관련이 없는 타입 간의 변환에 사용된다. 이것은 위험할 수 있으며, 제대로 사용되지 않으면 정의되지 않은 동작을 유발할 수 있다.

int i = 42;
int* pi = &i;
char* ch = reinterpret_cast<char*>(pi);  // int 포인터를 char 포인터로 변환

const_cast:

const_cast는 객체의 constness를 추가하거나 제거한다.
const 객체에 대한 non-const 참조 또는 포인터를 얻을 때 사용된다.

const int ci = 10;
int* pi = const_cast<int*>(&ci);  // const int 포인터를 non-const int 포인터로 변환

dynamic_cast:

dynamic_cast는 런타임에 타입 변환을 수행한다.
다형성을 가진 클래스 계층에서 사용된다. dynamic_cast는 런타임에 객체 타입을 검사하며, 변환할 타입이 올바른지 확인한다.

class Base { virtual void foo() {} };
class Derived : public Base {};

Base* b = new Derived();
Derived* d = dynamic_cast<Derived*>(b);  // 런타임에 Derived 포인터로 변환

 

각 캐스트 연산자는 특정 상황과 요구 사항에 따라 사용된다. static_cast와 reinterpret_cast는 주로 컴파일 타임에 타입 변환을 수행하며, const_cast는 constness를 조절하고, dynamic_cast는 런타임에 타입 검사와 안전한 다운캐스팅을 수행한다.




'CS > C++' 카테고리의 다른 글

inline 함수와 매크로 함수의 차이  (0) 2023.11.01
std::string 은 동적 할당 배열이다!  (0) 2023.11.01
explicit 키워드  (0) 2023.11.01
중괄호 초기화와 다양한 초기화 방법  (0) 2023.11.01
lvalue, rvalue, move 그리고 RVO  (0) 2023.10.31
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.