Avatar ·

C++ में सख्त उपनाम नियम (strict aliasing rule): यह क्या है और UB से कैसे बचें?

सभी को नमस्कार! मैंने C++ सीखना शुरू किया और "strict aliasing rule" शब्द पर ठोकर खाई। सच कहूं तो, मैं पूरी तरह से नहीं समझता कि यह क्या है और यह क्यों महत्वपूर्ण है। मैंने एक छोटा कोड लिखा है, जो मेरी राय में काम करना चाहिए, लेकिन कभी-कभी अजीब व्यवहार करता है। मैं एक float वेरिएबल की सामग्री को बाइट्स की array के रूप में पढ़ने की कोशिश कर रहा हूं: ```cpp #include float value = 3.14f; int* ptr = reinterpret_cast(&value); std::cout << *ptr << std::endl; // मुझे कुछ कचरा मान मिलता है ``` मैंने सोचा था कि `reinterpret_cast` बस बिट्स की पुनर्व्याख्या करेगा, और मुझे फ्लोटिंग पॉइंट संख्या का पूर्णांक प्रतिनिधित्व मिलेगा। लेकिन कंपाइलर कभी-कभी कुछ अप्रत्याशित करता है, और कोड क्रैश हो सकता है या अजीब परिणाम दे सकता है। मैंने सुना है कि यह कंपाइलर ऑप्टिमाइज़ेशन से संबंधित है। मेरा कंपाइलर (GCC फ्लैग -O2 के साथ) ऐसा कोड जनरेट करता है जो मेरी अपेक्षा के अनुसार व्यवहार नहीं करता। डिबग मोड में सब कुछ काम करता है, लेकिन रिलीज़ मोड में नहीं। कृपया समझाएं कि "सख्त उपनाम नियम" क्या है? क्यों

अभी तक कोई उत्तर नहीं।

लॉग इन करें उत्तर देने के लिए

ब्लॉग