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
### 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 |