여기에서 static_cast<>와 일반 C 스타일 캐스트의 차이점이 무엇인지 살펴보겠습니다.
(int)x와 같은 일반 캐스트는 C++에서 static_cast
이 static_cast<>()는 컴파일 시간 확인 기능을 제공하지만 C 스타일 캐스팅은 이를 지원하지 않습니다. 이 static_cast<>()는 C++ 코드 내부 어디에서나 찾을 수 있습니다. 그리고 이 C++ 캐스트를 사용하면 의도가 훨씬 더 잘 전달됩니다.
캐스트와 같은 C에서는 때때로 다른 유형 데이터를 가리키기 위해 일부 유형 포인터를 캐스트할 수 있습니다.
하나의 정수 포인터가 문자 유형 데이터를 가리킬 수 있는 것처럼 매우 유사하기 때문에 문자는 1바이트이고 정수는 4바이트라는 차이점만 있습니다. C++에서 static_cast<>()는 캐스팅과 같이 C보다 더 엄격합니다. 호환되는 유형 간에만 변환됩니다.
예시
char c = 65; //1-byte data. ASCII of ‘A’ int *ptr = (int*)&c; //4-byte
4바이트 포인터에서는 할당된 메모리 1바이트를 가리키고 있기 때문에 런타임 오류가 발생하거나 일부 인접 메모리를 덮어쓸 수 있습니다.
C++에서 static_cast<>()를 사용하면 컴파일러가 포인터와 데이터가 동일한 유형인지 여부를 확인할 수 있습니다. 그렇지 않으면 컴파일 중에 잘못된 포인터 할당 예외가 발생합니다.
char c = 65; //1-byte data. ASCII of ‘A’ int *ptr = static_cast<int>(&c);의 ASCII
컴파일 시간 오류가 발생합니다.