C++ 기본 캐스팅

sangmiha·2023년 5월 27일
0

C++ - Casting

목록 보기
1/1
post-thumbnail

서론

이번 글에서는 C++에서 가장 기본적인 형변환 기법인 'static_cast'에 대해 살펴보고, 이를 C에서 일반적으로 사용되는 형변환 방법과 비교해볼 것입니다. C++의 형변환에 대한 기본적인 사용법과 C의 형변환과의 차이점에 대해서도 함께 이야기하겠습니다.

C의 형변환

C의 형변환은 일반적으로 아래와 같은 형태로 사용됩니다:

int x = 10;
double* p = (double*)&x;

위의 코드를 보면, int형 데이터를 double형 포인터로 형변환하고 있는데, 이러한 작업은 C언어에서 에러 없이 수행됩니다.

그러나 이 코드는 1바이트 크기의 int형 데이터를 2바이트 크기의 double형에 할당하므로, 의도치 않은 값이 생성되고, 'p'를 이용해 값을 수정하면 예상치 못한 에러가 발생할 수 있습니다.

이런 방식의 C 언어의 형변환은 높은 유연성을 보이지만, 안정성 면에서는 부족함을 보입니다.

C++의 static_cast

static_cast는 기본적으로 아래와 같이 사용됩니다:

int x = 10;
double* p = static_cast<double*>(&x); // Compile-time error

이 코드는 위에서 C에서의 형변환과 동일한 작업을 수행하고 있지만, static_cast는 컴파일 시점에서 유효성을 검사하기 때문에, 이 코드는 컴파일 에러를 발생시킵니다.

이렇게 C++의 형변환은 보다 안정성을 동반한 형변환을 제공합니다.

static_cast의 이름에서 알 수 있듯이 이 형변환은 컴파일 시점에 정적으로 수행됩니다. 이 때문에 성능에 영향을 주지 않는 장점이 있습니다.

이 형변환은 주로 기본 데이터 타입 간의 변환, 포인터와 정수 간의 변환, 상속 관계에 있는 클래스 간의 포인터 또는 참조의 변환에 주로 사용됩니다.

간단한 예제를 아래에서 보도록 하겠습니다:

float f = 3.14f;
int i = static_cast<int>(f); // float를 int로 변환

class Base {};
class Derived : public Base {};
Base* b = new Derived;
Derived* d = static_cast<Derived*>(b); // 다운캐스팅

0개의 댓글