반도체/C++

18. C++의 형변환 (1)

Clair_de_Lune 2024. 7. 29. 14:07
728x90

18. C++의 형변환 

C++에서 형변환(타입 캐스팅)은 한 데이터 타입을 다른 데이터 타입으로 변환하는 과정

 

 

 

 

 

1. 암시적 형변환 (Implicit Conversion)

암시적 형변환은 C++ 컴파일러가 자동으로 수행하는 형변환입니다. 예를 들어, 정수형 변수를 실수형 변수에 할당할 때 자동으로 변환

 

 

2. 명시적 형변환 (Explicit Conversion)

명시적 형변환은 프로그래머가 의도적으로 형변환을 수행하는 방법입니다. C++에서는 여러 가지 방법으로 명시적 형변환을 수행

 

2.1. C 스타일 캐스팅

가장 기본적인 형변환 방법으로, (타입)을 사용하여 변환

double doubleValue = 5.5;
int intValue = (int)doubleValue; // double -> int로 변환

2.2. static_cast

static_cast는 안전한 형변환을 위해 제공되는 연산자입니다. 기본 데이터 타입 간의 변환이나 클래스 계층에서의 형변환에 사용

 

double doubleValue = 5.5;
int intValue = static_cast<int>(doubleValue); // double -> int로 변환

 

 

 

2.3. dynamic_cast

dynamic_cast는 주로 다형성을 사용하는 클래스 계층에서 안전한 형변환을 제공하는 연산자입니다. 런타임에 타입 체크를 수행하며, 주로 포인터나 참조를 사용할 때 사용

 

class Base {
public:
    virtual ~Base() {} // 가상 소멸자 필요
};

class Derived : public Base {};

Base* basePtr = new Derived();
Derived* derivedPtr = dynamic_cast<Derived*>(basePtr); // 안전한 다운캐스팅
if (derivedPtr) {
    // 변환 성공
}

 

 

 

2.4. const_cast

const_cast는 const나 volatile 속성을 제거하는 데 사용됩니다. 이 연산자는 주로 함수 인자에서 const 속성을 제거해야 할 때 사용

 

 

const int constValue = 10;
int* ptr = const_cast<int*>(&constValue); // const 속성 제거

 

 

 

 

2.5. reinterpret_cast

reinterpret_cast는 포인터나 참조의 비트 패턴을 직접적으로 변환합니다. 이 방법은 매우 위험할 수 있으며, 주의해서 사용해야 합니다.

int* intPtr = new int(10);
char* charPtr = reinterpret_cast<char*>(intPtr); // int* -> char*

 

 

 

C++에서 형변환은 여러 방법으로 수행할 수 있으며, 각 방법은 특정한 용도와 안전성을 가지고 있다.

  • 암시적 형변환은 자동으로 이루어지며, 타입 간의 호환성이 있을 때 사용됩니다.
  • 명시적 형변환은 프로그래머가 지정해야 하며, static_cast, dynamic_cast, const_cast, reinterpret_cast 등의 연산자를 사용하여 수행

 

 

  1. 암시적 형변환: 컴파일러가 자동으로 수행하는 형변환.
  2. 명시적 형변환: 프로그래머가 의도적으로 수행하는 형변환.
    • C 스타일 캐스팅
    • static_cast
    • dynamic_cast
    • const_cast
    • reinterpret_cast
728x90