문제

일반 캐스트 vs. static_cast vs. dynamic_cast 관련 질문 :

C ++에서 선호하는 캐스트 구문 스타일은 무엇입니까?

  • C 스타일 캐스트 구문 : (int)foo
  • C ++ 스타일 캐스트 구문 : static_cast<int>(foo)
  • 생성자 구문 : int(foo)

    동일한 지침으로 번역되지 않을 수 있지만 (그렇습니까?) 효과는 동일해야합니다 (맞습니까?).

    내장 숫자 유형 사이를 캐스트하는 경우 C ++ 스타일 캐스트 구문이 너무 장황합니다.전 자바 코더로서 저는 대신 C 스타일의 캐스트 구문을 사용하는 경향이 있지만 제 지역 C ++ 전문가는 생성자 구문을 사용한다고 주장합니다.

    어떻게 생각하십니까?

도움이 되었습니까?

해결책

다음 세 가지 이유로 C 스타일 캐스트를 사용하는 것이 절대 모범 사례입니다.

  • 이미 언급했듯이 여기에서는 확인이 수행되지 않습니다. 프로그래머는 강력한 타이핑을 약화시키는 다양한 캐스트 중 어떤 것이 사용되는지 알 수 없습니다.
  • 새로운 출연진은 의도적으로 시각적으로 인상적입니다. 캐스트는 종종 코드의 약점을 드러내므로 코드에서 캐스트를 표시하는 것이 좋은 것이라고 주장합니다.
  • 자동 도구로 캐스트를 검색하는 경우 특히 그렇습니다. C 스타일 캐스트를 안정적으로 찾는 것은 거의 불가능합니다.

    palm3D가 언급했듯이 : <인용구>

    C ++ 스타일의 캐스트 구문이 너무 장황하다고 생각합니다.

    위에 제시된 이유로 의도 된 것입니다.

    생성자 구문 (공식 이름 : 함수 스타일 캐스트)은 C 스타일 캐스트와 의미 상 동일 하며 마찬가지로 피해야합니다 (선언시 변수 초기화 제외). 원인. 사용자 지정 생성자를 정의하는 형식의 경우에도 이것이 사실인지 여부는 논쟁의 여지가 있지만 효과적인 C ++에서 Meyers는 이러한 경우에도 사용을 자제해야한다고 주장합니다. 예시 : 라코 디스

    여기의 static_cast는 실제로 auto_ptr 생성자를 호출합니다.

다른 팁

Stroustrup 에 따르면 : <인용구>

'새로운 스타일의 캐스트'가 소개되었습니다. 프로그래머에게 그들의 의도를 더 명확하고 더 많은 오류를 포착하기 위해 컴파일러.

그래서 추가 컴파일 시간 검사를 수행하므로 안전을위한 것입니다.

이 주제와 관련하여 Scott Meyers ( 더 효과적인 C ++ , 항목 2 : C ++ 스타일 캐스트 선호).

C ++ 스타일 캐스트가 장황하다는 데 동의합니다.하지만 그게 제가 좋아하는 점입니다. 발견하기가 매우 쉬우 며 코드를 읽기 쉽게 만듭니다 (쓰기보다 더 중요합니다).

또한 어떤 종류의 캐스트가 필요한지 생각하고 올바른 캐스트를 선택하도록 강요하여 실수의 위험을 줄입니다.또한 런타임 대신 컴파일 타임에 오류를 감지하는 데 도움이됩니다.

나는 두 가지 이유로 static_cast를 사용합니다.

  1. 어떤 일이 일어나고 있는지 분명합니다.캐스트가 진행되고 있다는 사실을 깨닫지 않고는 읽을 수 없습니다.C 스타일 캐스트를 사용하면 눈을 멈추지 않고 바로 지나갈 수 있습니다.
  2. 내 코드에서 전송중인 모든 위치를 쉽게 검색 할 수 있습니다.

확실히 C ++ 스타일.추가 타이핑은하지 말아야 할 때 캐스팅을 방지하는 데 도움이됩니다. :-)

C 스타일 캐스트 구문, 오류 검사하지 마십시오. C ++ 스타일의 캐스트 구문, 일부 검사를 수행합니다. static_cast를 사용할 때는 검사를하지 않더라도 적어도 여기서주의해야한다는 것을 알고 있습니다.

C 스타일 캐스트는 최악의 방법입니다.보기가 더 어렵고, 그럴 수 없으며, 합쳐서는 안되는 여러 동작을 합치고, C ++ 스타일 캐스트가 할 수있는 모든 것을 할 수 없습니다.언어에서 C 스타일 캐스트를 제거 했어야했습니다.

현재 모든 곳에서 C 스타일 캐스트를 사용합니다.나는 다른 캐스트 질문 을 물었고, 다른 이유가없는 경우 대신 static_cast를 사용하는 것이 "그냥"(나는 그 용어를 좋아합니다).아마 그것을 사용하기 시작할 것입니다.

C ++ 스타일이 마음에 들지 않습니다.함수 호출과 너무 비슷해 보입니다.

C ++ 스타일을 선택하고, 더 나쁜 것은 C ++의 명시 적 타입 캐스트를 구성하는 추악한 장황한 코드 스 니펫이 우리 모두가 알고있는 것을 지속적으로 상기 시켜줄 것입니다 (즉, 명시 적 캐스팅은 좋지 않습니다.. 런타임 오류 추적 기술을 익히려면 C ++ 스타일을 사용하지 마십시오.

생성자 구문.C ++는 OO이고 생성자가 존재하며 사용합니다. 이러한 컨버전 액터에 주석을 달 필요가 있다고 생각되면 내장 된 유형뿐만 아니라 모든 유형에 대해이를 수행해야합니다.변환 ctor에 'explicit'키워드를 사용할 수도 있지만 클라이언트 구문은 내장 유형에 대한 ctor 구문이하는 일을 정확히 모방합니다. 탐욕 스럽기 때문에 사실 일 수 있지만 더 많은 문자를 입력하면 검색이 쉬워진다는 사실이 놀랍습니다.왜 이들을 특별하게 취급합니까? 많은 int / unsigned / ...와 double / float-그래픽을 사용하여 수학 공식을 작성하고 매번 static_cast를 작성해야하는 경우 공식의 모양이 복잡 해져서 매우 읽을 수 없습니다. 그리고 그것은 당신이 자신의 존재를 알지도 못한 채 많은 시간을 전환 할 것이기 때문에 어쨌든 힘든 전투입니다. 다운 캐스팅 포인터의 경우 기본적으로 그렇게 할 수있는 ctor가 없으므로 static_cast를 사용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top