Що за правила C ++, що означає рівне , помилково ?. Подано:
float f {-1.0};
bool equal = (static_cast<unsigned>(f) == static_cast<unsigned>(-1.0));
Наприклад, 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;
}
Випускає такий вихід:
f=ffffffff
cf=0
6
Майте нагороду: вас спіймало часто забуте правило про невизначену поведінку!
—
Вірсавія
Яких результатів ви очікуєте перетворення негативного поплавця в непідписаний?
—
Амадей
@Amadeus, ймовірно, звичайне обгортання, яке ми отримуємо при перетворенні від'ємного цілого числа. Я повинен був перевірити, що це UB, тому що це мене здивувало.
—
AProgrammer
@Amadeus, це було більше випадком розуміння різниці. Я виправив помилку помилки друку кілька тижнів тому ... const-float явно був переданий до безпідписаного (помилка), і неявно повернувся до підписаного (як параметр функції підписаного). Пізніше я розмірковував, чому початкова помилка викликала нульове значення у функції. Тестування говорить про те, що поплавок був const. Нестандартний поплавок, який явно був переданий непідписаним, а потім неявно повернутий до підписаного, не призвів до того ж поведінки - неодноразовий зміст, який був два рази, мав початкове і очікуване значення.
—
GreyMattR