Language/C++

[C++] 형변환

리네엔 2024. 10. 24. 09:58

C 스타일 형변환

int a = 10;
double b = (double)a; // C 스타일 형변환

C++ 스타일 형변환 - 캐스팅 연산자

1. static_cast

  • 컴파일 타임에 수행되며, 관련 있는 타입들 간의 변환에 사용
    int a = 42;
    double b = static_cast<double>(a); // 정수를 실수로 변환
    

double d = 3.14;
int i = static_cast(d); // 실수를 정수로 변환 (소수점 이하 버림)


### 2. [dynamic_cast](https://learn.microsoft.com/ko-kr/cpp/cpp/dynamic-cast-operator?view=msvc-170)
- 런타임 타입 검사
- 상속관계에서 안전하게 다운캐스팅할 때 사용
- 캐스팅이 실패하면 nullptr반환
- 가상함수가 정의된 클래스에만 사용 가능

class Base {
virtual void foo() {} // 가상 함수 필요
};

class Derived : public Base {
void bar() {}
};

Base* base = new Derived();
Derived* derived = dynamic_cast<Derived*>(base); // 안전한 다운캐스팅

if (derived) {
std::cout << "캐스팅 성공" << std::endl;
} else {
std::cout << "캐스팅 실패" << std::endl;
}


### 3. [const_cast](https://learn.microsoft.com/ko-kr/cpp/cpp/const-cast-operator?view=msvc-170)
- 상수성 제거를 위한 캐스팅 연산자

const int a = 10;
int* b = const_cast<int*>(&a); // 상수성 제거

*b = 20; // 위험: 정의되지 않은 동작 (원래 상수였기 때문에 수정하는 것은 위험함)


### 4. [reinterpret_cast](https://learn.microsoft.com/ko-kr/cpp/cpp/reinterpret-cast-operator?view=msvc-170)
- 비트 단위의 변환을 하는 캐스팅 연산자
- 포인터 간의 변환이나 포인터와 정수사이의 변환등 서로 관련 없는 타입들 간의 변환에 사용

int a = 65;
char* b = reinterpret_cast<char*>(&a); // 정수를 문자 포인터로 변환

std::cout << *b << std::endl; // 'A' 출력 (ASCII 코드 65는 'A'에 해당)

```

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

[C++] string to / from string  (0) 2024.10.24
[C++] transform  (1) 2024.10.24