static_cast와 repretter_cast의 차이점은 무엇입니까?
c++에서 c함수를 사용하고 있습니다.c에서 void type 인수로 전달된 구조는 동일한 구조 타입으로 직접 저장됩니다.
예를 들어 C에 있습니다.
void getdata(void *data){
Testitem *ti=data;//Testitem is of struct type.
}
c++에서도 동일하게 하려면 static_cast를 사용합니다.
void foo::getdata(void *data){
Testitem *ti = static_cast<Testitem*>(data);
}
그리고 내가 사용할 때reinterpret_cast
같은 일을 하고, 구조물을 주조하고
사용할 때Testitem *it=(Testitem *)data;
이것도 마찬가지야.하지만 이 세 가지를 사용하면 구조가 어떻게 영향을 받나요?
A static_cast
(직관적으로) 어떤 상황에서 성공할 수 있고 위험한 캐스팅이 없을 때 의미가 있는 캐스팅인 한 유형에서 다른 유형으로 캐스팅하는 것입니다.예를 들어,static_cast
a void*
에 대해서int*
, 그 이후로void*
실제로 가리키고 있을지도 모른다int*
, 또는int
에 대해서char
이러한 변환은 의미가 있기 때문입니다.단, 할 수 없습니다.static_cast
한 사람int*
에 대해서double*
이 변환은, 다음과 같은 경우에 한해 의미가 있기 때문에,int*
어떤 이유로든 찌그러져서double*
.
A reinterpret_cast
는 어떤 값의 비트를 다른 값의 비트로 재해석할 수 있는 안전하지 않은 변환을 나타내는 캐스트입니다.예를 들어, 캐스팅은int*
에 대해서double*
에서는 합법입니다.reinterpret_cast
단, 결과는 지정되지 않았습니다.마찬가지로, 캐스팅은int
에 대해서void*
완전히 합법이다reinterpret_cast
위험하긴 하지만요
둘 다 아니다.static_cast
도 아니다reinterpret_cast
제거할 수 있다const
뭔가로부터요.캐스트는 할 수 없습니다.const int*
에 대해서int*
이 깁스들 중 하나를 사용해서요.이 경우,const_cast
.
폼의 C 스타일 캐스팅(T)
를 실행하려고 하는 것으로 정의됩니다.static_cast
가능하면 뒤로 넘어지는 것reinterpret_cast
그게 안 되면요또,const_cast
꼭 그래야 한다면요
일반적으로, 당신은 항상 다음을 선호해야 합니다.static_cast
안전해야 할 캐스팅이니까요.제대로 정의되지 않은 캐스트를 실수로 실행하려고 하면 컴파일러가 오류를 보고합니다.사용만reinterpret_cast
만약 당신이 정말로 하고 있다면, 기계에서 일부 비트의 해석을 바꾸는 것이고, 당신이 기꺼이 위험을 감수할 경우에만 C-스타일 캐스트를 사용합니다.reinterpret_cast
. 사용자의 경우 를 사용해야 합니다.static_cast
로부터의 다운캐스트 이후void*
명확하게 정의되어 있는 경우도 있습니다.
언급URL : https://stackoverflow.com/questions/6855686/what-is-the-difference-between-static-cast-and-reinterpret-cast
'programing' 카테고리의 다른 글
C에서 글로벌 변수를 사용하는 것은 언제가 좋습니까? (0) | 2022.07.16 |
---|---|
Java 앱에서 Windows 서비스를 만드는 방법 (0) | 2022.07.16 |
Vue 2는 클릭 가능과 이미지를 분할합니다. (0) | 2022.07.13 |
Java에서 환경변수를 설정하려면 어떻게 해야 합니까? (0) | 2022.07.13 |
휴지 모드와 스프링 데이터 JPA의 차이점은 무엇입니까? (0) | 2022.07.13 |