경고 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 };