C++ float-to-int 변환은 정의되지 않은 동작이다

C++ float-to-int conversion can be undefined behavior

C++에서 float를 int로 변환할 때, 잘린 값이 대상 정수형에 맞지 않으면 정의되지 않은 동작(UB)이 발생합니다. Microsoft의 GSL 라이브러리조차 이 문제를 제대로 처리하지 못하고, 문서와 달리 gsl::narrow는 일부 입력에 대해 예외를 던지는 대신 UB를 일으킵니다. 현재 프로세서와 컴파일러에서는 대개 의도한 대로 동작하지만, 하드웨어에 따라 결과가 달라질 수 있고, 컴파일러의 최적화에 따라 코드가 갑자기 깨질 위험이 있습니다. 올바른 해결책은 캐스팅 전에 범위를 검사하는 것입니다.

컴파일러가 다른 변환을 적용하게 되면 코드가 갑자기 작동을 멈출 수 있습니다.

같은 날의 다른 소식

2026-08-03