나는 일반적으로 C 스타일의 캐스트가 유해하다고 생각합니다.함수형 캐스트는 유해한 것으로 간주됩니까?
functionThatTakesAWidget((Widget) gizmo);
C 스타일 캐스트를 사용하여 : 그래서,이 기능을 다음과 같이 호출 할 수있는 클래스를 Widget
class Widget{
public:
explicit Widget(Gizmo gizmo);
};
을 부여. 또는 함수형 캐스트를 사용하여 쓸 수 있습니다.
functionThatTakesAWidget(Widget(gizmo));
그러나 이것은 정확히 같습니다. 그래서 더 좋든 나쁘 든.
functionThatTakesAWidget(static_cast<Widget>(gizmo));
을하지만 클래스 Doohickey
주어진 : 난 정말 C 스타일 캐스트를 방지하고 싶었다면 내가 쓸 수
functionThatTakesADoohickey(Doohickey(left_gizmo, right_gizmo));
: 나는 글을 피할 수
class Doohickey {
public:
Doohickey(Gizmo left_gizmo, Gizmo right_gizmo);
};
에게 나는 이것이 '캐스트'로 간주되지 않는다고 가정한다. 그러나 이것과 함수형 캐스트의 차이점은 무엇입니까? 왜 이것이 괜찮습니까?하지만 함수형 캐스트는 그렇지 않습니다. C 스타일 캐스트를 피하기위한
함수 스타일 캐스트는 실제로 캐스트가 아니며 생성자 또는 유형 변환 연산자 호출입니다. – EJP
@EJP'(위젯) 기즈모'는'위젯 (기즈모) '과 정확히 동일합니다. – user3502661
가변 위치를 다른 유형으로 재 해석하고 생성자 또는 유형 변환을 유발하는 C 스타일 형변환에는 차이가 있습니다. C 스타일 캐스트는 C 프로그래밍 언어의 종속 변수이며 특정 변수 또는 메모리 위치가 특정 유형임을 컴파일러에 알리는 것입니다. 변환을 수행하는 메소드를 제공하거나 컴파일러가 변환을 수행 할 일련의 메소드를 찾을 수있는 경우 C++에서 수행하는 변환이 없습니다. C 스타일 캐스트는이 차이로 인해 훨씬 안전하지 않습니다. –