경고 C26475

함수 스타일 C-캐스트를 사용하지 마세요.

C++ 핵심 지침: ES.49: 캐스트를 사용해야 하는 경우 명명된 캐스트를 사용합니다.

함수 스타일 캐스트(예: int(1.1))는 안전성이 의심스러운 C 스타일 캐스트의 또 다른 형태입니다.(int)1.1 특히 컴파일러는 C-캐스트 또는 함수 캐스트에서 데이터 손실이 발생할 수 있는지 검사 시도하지 않습니다. 두 경우 모두 캐스팅을 방지하거나 가능하면 중괄호가 있는 이니셜라이저를 사용하는 것이 좋습니다. 둘 다 작동하지 않는 경우 정적 캐스트가 적합할 수 있지만 지침 지원 라이브러리의 유틸리티를 사용하는 것이 좋습니다.

  • gsl::narrow 는 무손실 변환을 보장하고 불가능한 경우 throw합니다 gsl::narrowing_error .
  • gsl::narrow_cast 변환 시 데이터가 손실될 수 있으며 허용된다는 것을 명확하게 명시합니다.

설명

  • 이 규칙은 기본 형식의 상수에 대해서만 실행됩니다. 컴파일러는 이러한 경우 데이터 손실을 명확하게 감지하고 중괄호가 있는 이니셜라이저를 사용하는 경우 오류를 내보낼 수 있습니다. 런타임 실행이 필요한 경우 C26493 NO_CSTYLE_CAST 플래그가 지정됩니다.

  • 기본 이니셜라이저는 플래그가 지정되지 않습니다(예: int()).

예시

위험한 변환 예제:

constexpr auto planck_constant = float( 6.62607004082e-34 ); // C26475

위험한 변환에 대한 컴파일러 오류, 잠재적인 데이터 손실 검색:

constexpr auto planck_constant = float{ 6.62607004082e-34 }; // Error C2397

위험한 변환을 수정하려면 적절한 크기의 기본 형식을 사용합니다.

constexpr auto planck_constant = double{ 6.62607004082e-34 };