Por que em C++ o static_cast<não assinado> de números negativos difere se o número é constante ou não



casting (1)

O comportamento do seu programa é indefinido : o padrão C ++ não define a conversão de um tipo de ponto flutuante negativo para um tipo unsigned .

(Observe que o comportamento familiar envolvente se aplica apenas a tipos integrais negativos.)

Portanto, há pouco sentido em tentar explicar a saída do seu programa.

Quais são as regras do C ++ que significam igual é falso ? Dado:

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

Por exemplo, 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;
}

Produz a seguinte saída:

 f=ffffffff
cf=0




casting