मैं आज सुबह कुछ टेम्पलेट कोड पर काम कर रहा था, जहां मैंने BOOST_STATIC_ASSERT
का उपयोग किया ताकि यह सुनिश्चित किया जा सके कि मैं गलत प्रकार का संदर्भ नहीं बना रहा था, क्योंकि मैंने सोचा था कि यह एक स्पष्ट त्रुटि संदेश हो सकता है।सी ++ कैसे एक कॉन्स डबल संभालता है और जो एक int को संदर्भित करता है?
#include <iostream>
int main()
{
int x = 5;
const double& y = x;
std::cout << y << std::endl;
return 0;
}
: हालांकि जब मैं स्थिर ज़ोर को हटाने के विकल्प संकलक त्रुटि मुझे लगता है कि जीसीसी की खोज के लिए भी शिकायत नहीं है जब आप एक स्थिरांक डबल & किसी पूर्णांक की चर्चा करते हुए बनाने की कोशिश चौंक गया था पर एक नज़र लेने की कोशिश की संकलित करता है, और यह भी चेतावनी नहीं देता है:
$ g++ ~/stuff/badRef.cpp -Wall -Wextra -pedantic
$ a.out
5
यहां क्या हो रहा है? क्या यह अपरिभाषित व्यवहार है? यदि ऐसा है तो शिकायत क्यों नहीं करती? मेरी मशीन int पर 4 बाइट्स और एक डबल 8 है। इसका मतलब है कि एक डबल & प्रिंट करते समय इसे उस पते पर 8 बाइट्स को डबल के रूप में समझना चाहिए और प्रिंट करना चाहिए, फिर भी उस स्थान पर वास्तव में 4 बाइट int है।
बहुत उलझन में। मदद!
जीसीसी का कौन सा संस्करण? –
यह संस्करण 4.3.3 है। – voltrevo
क्या होता है जब आप 'x = 42; 'को' डबल और y = x; 'के बाद जोड़ते हैं? यह पहली नजर में उत्सुक/अप्रत्याशित हो सकता है। – moala