¿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