Ne araçlarının C ++ kuralları böyle eşit olduğu yanlış ?. Verilen:
float f {-1.0};
bool equal = (static_cast<unsigned>(f) == static_cast<unsigned>(-1.0));
Örneğin, 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;
}
Aşağıdaki çıktıyı üretir:
f=ffffffff
cf=0
6
Bir oy verin: tanımlanmamış davranış hakkında unutulmuş bir kural tarafından yakalandınız!
—
Bathsheba
Negatif bir şamandırayı imzasız hale dönüştürmek için hangi sonuçları beklersiniz?
—
Amadeus
@Amadeus muhtemelen negatif tamsayıyı dönüştürürken elde ettiğimiz normal sargı. UB olup olmadığını kontrol etmek zorunda kaldım çünkü bu beni şaşırttı.
—
16'da programcı
@Amadeus, daha çok farkı anlamak için bir durumdu. Birkaç hafta önce bir yazım hatası düzelttim ... const-float açıkça imzasız (bug) ve dolaylı olarak imzalı (imzalı bir işlev parametresi olarak) geri döküm. Daha sonra orijinal hatanın neden işlevde sıfır değerine neden olduğunu düşündüm. Testler şamandıranın sabit olduğu için olduğunu göstermektedir. Açıkça imzasız ve sonradan imzalı olarak imzalı olarak atılan bir const olmayan şamandıra aynı davranışla sonuçlanmadı - iki kez dökülen const, orijinal ve beklenen değere sahipti .
—
tarihinde GreyMattR