c++ casting

¿Por qué en C++ difieren static_cast<unsigned> de números negativos si el número es constante o no?



casting (1)

El comportamiento de su programa no está definido : el estándar C ++ no define la conversión de un tipo de coma flotante negativo a un tipo unsigned .

(Tenga en cuenta que el comportamiento envolvente familiar solo se aplica a los tipos integrales negativos).

Por lo tanto, no tiene mucho sentido intentar explicar la salida de su programa.

¿Cuáles son las reglas de C ++ que significan que igual es falso ? Dado:

float f {-1.0}; bool equal = (static_cast<unsigned>(f) == static_cast<unsigned>(-1.0));

Por ejemplo, https://godbolt.org/z/fcmx2P

#include <iostream> int main() { float f {-1.0}; const float cf {-1.0}; std::cout << std::hex; std::cout << " f" << "=" << static_cast<unsigned>(f) << ''/n''; std::cout << "cf" << "=" << static_cast<unsigned>(cf) << ''/n''; return 0; }

Produce el siguiente resultado:

f=ffffffff cf=0