programing

static_cast와 repretter_cast의 차이점은 무엇입니까?

bestcode 2022. 7. 16. 15:10
반응형

static_cast와 repretter_cast의 차이점은 무엇입니까?

중복 가능성:
static_cast, dynamic_cast 및 재해석_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

반응형