Nagie's DevStory

[CPP] 37. C++ 스타일 형변환(C++ Style Type Cast) 본문

Programming/C++

[CPP] 37. C++ 스타일 형변환(C++ Style Type Cast)

Nagie 2023. 10. 22. 23:03
728x90

C++에서 C 스타일의 형변환을 사용할 수 있지만 권장하지는 않는다.

보기엔 조금 복잡해 보일 수는 있지만 C++에서 제공하는 형변환 연산자를 사용하는 게 권장되며

총 4가지 형변환 연산자가 있다.

 

1. static_cast

 

'static_cast'는 C++에서 보편적으로 사용되는 형변환 연산자로

컴파일러가 자동으로 변환할 수 있는 형식 간의 형변환을 해준다.

간단하게 정수를 실수로 변환하거나 서브 클래스 포인터를 슈퍼클래스 포인터로 변환할 때 사용된다.

 

//static_cast의 사용법
int integerNumber = 42;
double doubleNumber = static_cast<double>(integerNumber);

 

 

2. dynamic_cast

 

'dynamic_cast'는 주로 다형성을 다룰 때 사용되며, 안전한 형변환을 수행하게 되는데

런타임에 실제 객체의 유형을 확인하고 형변환을 하기에 프로그램의 성능 하락을 감수하고 써야 하며

'dynamic_cast'가 코드에 등장하게 되었다면 상황이 영 좋지 못한 쪽으로 흐르고 있다고 생각해야 한다.

 

//dynamic_cast의 사용법
Base* basePtr = new Derived;
Derived* derivedPtr = dynamic_cast<Derived*>(basePtr);

if (derivedPtr) {
    // 안전하게 형변환 수행
}

 

 

3.  const_cast

 

'const_cast'는 'const'한정자를 추가하거나 제거하는 데 사용된다.

주로 포인터나 참조를 통해 변수를 수정하기 위해 사용되지만, 사용에 신중해야 한다.

const를 지정해 놓은 이유는 대체로 그 값을 건들면 안 되기 때문에 지정하는 것이라

무턱대고 건들면 좋지 못한 결과가 생길 수도 있기 때문이다.

 

//const_cast 사용법
const int readOnlyValue = 10;
int& mutableValue = const_cast<int&>(readOnlyValue);
mutableValue = 20;

 

 

4. reinterpret_cast

 

'reinterpret_cast'는 다른 형식의 포인터를 변환하거나 다른 형식의 객체를 강제로 변환할 때 사용된다.

이 연산자는 매우 매우 주의해서 사용해야 하며 일반적으로 하드웨어와 관련된 낮은 수준의 작업에 사용된다.

C에서 사용하던 형변환 연산자가 'reinterpret_cast'와 비슷하다.

 

//reinterpret_cast 사용법
int intValue = 42;
double* doublePtr = reinterpret_cast<double*>(&intValue);

 

C++ 스타일의 형변환을 사용하게 되면 코드의 가독성은 조금 희생할 수 있겠지만 형변환 오류를 크게 줄일 수 있다.

728x90
Comments