여기에 세 가지 언어로 태그를 달았는데 세 언어의 대답은 정말 다릅니다. C ++에 대한 논의는 C 캐스트에 대한 논의도 의미하며, 네 번째 답을 제공합니다.
명시 적으로 언급하지 않은 것이므로 C로 시작하겠습니다. C 캐스트에는 많은 문제가 있습니다. 하나는 그들이 다양한 일을 할 수 있다는 것입니다. 어떤 경우에는 캐스트가 컴파일러에게 (본질적으로) "종료, 내가하는 일을 알고 있습니다"라고 말하는 것 이상을 수행하지 않습니다. 즉, 문제를 일으킬 수있는 변환을 수행 할 때도 컴파일러가 잠재적 인 문제에 대해 경고하지 않습니다. 예를 들어 char a=(char)123456;. 정의 된이 구현의 정확한 결과 (크기 및 서명 정도에 따라 다름)char), 다소 이상한 상황을 제외하고는 아마도 유용하지 않을 것입니다. C 캐스트는 또한 컴파일 타임에만 발생하는 것인지 (즉, 컴파일러에게 일부 데이터를 해석 / 처리하는 방법을 알려주는 것임) 런타임에 발생하는 것 (예 : double에서 실제 변환)인지 여부에 따라 다릅니다. 긴).
C ++는 여러 "새로운"캐스트 연산자를 추가하여 적어도 어느 정도이를 처리하려고합니다. 각 연산자는 C 캐스트 기능의 하위 집합으로 만 제한됩니다. 당신이 경우 -이 (예를 들어) 실수로 당신이 정말로 의도하지 않은 변환 할 더 어렵게 단지 당신이 사용할 수있는 객체에 const와 멀리 캐스팅 의도을 const_cast하고 있는지 것일 만 이 영향을 줄 수있는 일이 있는지 여부입니다 객체는 const, volatile또는 아닙니다. 반대로,이 static_cast객체인지 여부에 영향을 할 수 없습니다 const또는volatile. 요컨대, 대부분의 동일한 유형의 기능을 가지고 있지만 한 캐스트가 일반적으로 한 가지 유형의 변환 만 수행 할 수 있도록 분류되어 단일 C 스타일 캐스트가 한 번의 작업으로 2 ~ 3 개의 변환을 수행 할 수 있습니다. 주된 예외는 적어도 일부 경우 에 a 대신 a 를 사용할 수 있으며 으로 작성 되었음에도 불구하고 실제로 . 예를 들어, 클래스 계층을 위 또는 아래로 이동하는 데 사용할 수 있지만 계층 구조를 "위"로 캐스트하는 것은 항상 안전하므로 정적으로 수행 할 수 있지만 계층 구조를 "아래로"캐스트하는 것은 반드시 안전하지 않으므로 안전하지 않습니다. 동적으로 수행됩니다.dynamic_caststatic_castdynamic_caststatic_castdynamic_cast
Java와 C #은 서로 훨씬 더 유사합니다. 특히, 둘 다 캐스팅은 (가상?) 항상 런타임 작업입니다. C ++ 캐스트 연산자의 경우 일반적으로 dynamic_cast실제로 수행 된 작업의 관점 에서 a 에 가장 가깝습니다. 즉, 개체를 특정 대상 유형으로 캐스팅하려고 할 때 컴파일러는 해당 변환이 허용되는지 여부를 확인하기 위해 런타임 검사를 삽입합니다. , 그렇지 않은 경우 예외를 throw합니다. 정확한 세부 사항 (예 : "불량 캐스트"예외에 사용 된 이름)은 다양하지만 기본 원칙은 거의 유사합니다 (메모리가 제공되는 경우 Java는 intC에 훨씬 더 가까운 몇 가지 비 객체 유형에 캐스트를 적용합니다. 캐스트-그러나 이러한 유형은 1) 확실히 기억하지 못하며 2) 사실이더라도 어쨌든별로 중요하지 않습니다).
좀 더 일반적으로 살펴보면 상황은 매우 간단합니다 (적어도 IMO). 캐스트 (분명히 충분히)는 특정 유형에서 다른 유형으로 무언가를 변환하고 있음을 의미합니다. 그렇게하면 "왜?"라는 질문이 제기됩니다. 정말로 무언가가 특정 유형이되기를 원한다면, 시작하는 유형으로 정의하지 않은 이유는 무엇입니까? 그것은 그러한 변환을 할 이유가 전혀 없다는 것을 말하는 것이 아니라, 그것이 일어날 때마다 올바른 유형이 전체에 사용되도록 코드를 재 설계 할 수 있는지에 대한 질문을해야합니다. 겉보기에 무해한 변환 (예 : 정수와 부동 소수점 사이)조차도 일반적인 것보다 훨씬 더 면밀히 조사해야합니다. 그들의 모습 에도 불구하고유사성, 정수는 "계산 된"유형의 경우 실제로 사용되어야하며 "측정 된"유형의 경우 부동 소수점을 사용해야합니다. 구별을 무시하는 것은 "평균적인 미국 가정에는 1.8 명의 자녀가있다"와 같은 말도 안되는 말로 이어진다. 우리 모두 그 일이 어떻게 일어나는지 알 수 있지만 사실은 1.8 명의 자녀가있는 가족이 없다는 것 입니다. 1 개 또는 2 개 또는 그 이상일 수 있지만 1.8 개는 없습니다.