क्या सी ++ नियम है कि साधन के बराबर है झूठा ?। दिया हुआ:
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
एक उत्थान है: आप अपरिभाषित व्यवहार के बारे में एक बार-बार भूल गए नियम से पकड़े गए हैं!
—
बाथशीबा
एक नकारात्मक नाव को एक अहस्ताक्षरित में परिवर्तित करने के क्या परिणाम मिलते हैं?
—
एमॅड्यूस
@Addus शायद नकारात्मक पूर्णांक को परिवर्तित करते समय हमारे चारों ओर सामान्य आवरण है। मुझे यह जांचना था कि यह यूबी था क्योंकि इससे मुझे आश्चर्य हुआ।
—
एपीग्रामग्राम
@ अमाडस, यह अंतर को समझने का मामला था। मैंने कुछ हफ़्ते पहले एक टाइपो बग तय किया था ... एक कॉन्स्ट-फ्लोट स्पष्ट रूप से अहस्ताक्षरित (बग) में डाली गई थी, और स्पष्ट रूप से हस्ताक्षरित (एक हस्ताक्षरित फ़ंक्शन पैरामीटर के रूप में)। मैंने बाद में विचार किया कि मूल बग फ़ंक्शन में शून्य मान क्यों पैदा कर रहा है। परीक्षण से पता चलता है कि यह फ्लोट कांस्टेबल था। एक गैर-कॉन्स्टेबल फ़्लोट जो स्पष्ट रूप से डाली गई थी और फिर हस्ताक्षर करने के लिए वापस डाली गई थी, एक ही bahaviour में परिणाम नहीं हुआ - दो बार-कास्ट नॉन-कॉस्ट का मूल और अपेक्षित मूल्य था।
—
ग्रेमुएटीआर