int, double 변수와의 덧셈을 수행할 때 int형 변수가 자동으로 double 변수로 캐스팅되는 경우에 해당
void * 타입의 주소를 특정 구조체 포인터 타입의 주소로 바꾸는 경우에 해당
(예시)
ptr = (Something *)other_ptr;
int_variable = (int)float_variable;
(문제)
static_cast
: 언어적 차원에서 지원하는 일반적 타입 변환const_cast
: 객체의 상수성(const)을 없애는 타입 변환(const int
-> int
)dynamic_cast
: 파생 클래스 사이의 다운 캐스팅 ❓reinterpret_cast
: 서로 관련이 없는 포인터들 사이의 캐스팅(원하는 캐스팅 종류) <바꾸려는 타입> (무엇을 바꿀 것인가?)
(예시)
static_cast <int> (float_variable)
포인터 또는 참조형의 상수성을 잠깐 제거해주는 데 사용한다.
(예시)
#include <iostream>
using namespace std;
int main(void){
char str[] = "BlockDMask";
const char * ptr = str;
cout << "before :" << str << endl;
char * c = const_cast<char *> (ptr);
c[0] = 'Q';
cout << "after: "<< str << endl;
return 0;
}
이때 상수형 포인터는 다음과 같이 까다롭게 정의될 수 있으니(변수가 const인 경우, non-const인 경우, 본인 자체가 const인 경우, const를 가리키는 포인터인 경우 등)
링크를 참고해서 나중에 필요할 때 보는 걸로 하자.
가장 일반적인 용도는 Base 클래스 포인터를 Derived 클래스 포인터로 변환하는 것
그 외는 추상 클래스 배우고 나서 공부하는 게 나아 보여서 skip
임의의 포인터 타입끼리 변환을 허용하는 캐스트 연산자
정수형 -> 포인터로 바꿀 수 있음
오픈소스 코드를 가져다가 쓸 때 디버깅하기 좋은 것이다.
타입이 안 맞으면 내 코드 선에서 해결할 수 있는 방법이다.
그 외는 여기 링크 참고