لماذا في C++ هل static_cast<غير محدد> للأرقام السالبة تختلف إذا كان الرقم ثابتًا أم لا



casting (1)

سلوك البرنامج غير معرف : لا يحدد معيار C ++ تحويل نوع النقطة العائمة السالبة إلى نوع unsigned .

(لاحظ أن سلوك الالتفاف المألوف ينطبق فقط على الأنواع المتكاملة السلبية.)

لذلك ، هناك فائدة تذكر في محاولة شرح مخرجات البرنامج.

ما هي قواعد 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




casting