मैं कुछ सी ++ स्थिर विश्लेषण नियमों को लागू करने रहा हूँ, और उनमें से एक समारोह के लिए एक संदर्भ पैरामीटर के लिए एक संदर्भ या सूचक लौटने, यानी निम्न से एक समारोह पर प्रतिबंध लगाता है सभी असंगत हैं:क्या यह सी ++ स्थिर विश्लेषण नियम समझ में आता है?
int *f(int& x) { return &x; } // #1
const int *g(const int& x) { return &x; } // #2
int& h(int& x) { return x; } // #3
const int& m(const int& x) { return x; } // #4
इसके लिए दिया गया औचित्य यह है कि "यह कार्यान्वयन-परिभाषित व्यवहार है कि संदर्भ पैरामीटर एक अस्थायी वस्तु है या पैरामीटर का संदर्भ है।"
मैं इस से परेशान हूं, हालांकि, सी ++ में स्ट्रीम ऑपरेटर इस तरह से लिखे गए हैं, उदा।
std::ostream& operator<<(std::ostream& os, const X& x) {
//...
return os;
}
मुझे लगता है कि मैं बहुत विश्वास है कि सी ++ में धारा ऑपरेटरों सामान्य प्रदर्शनी कार्यान्वयन से परिभाषित व्यवहार में नहीं है कर रहा हूँ, तो क्या हो रहा है?
मेरी समझ के अनुसार वर्तमान में, मैं उम्मीद करता हूं कि # 1 और # 3 अच्छी तरह से परिभाषित किए जाएंगे, इस आधार पर कि अस्थायी गैर-कॉन्स्ट संदर्भों के लिए बाध्य नहीं हो सकते हैं, इसलिए int& x
वास्तविक वस्तु को संदर्भित करता है कार्यकाल के दायरे से बाहर जीवनकाल है, इसलिए उस वस्तु के सूचक या संदर्भ को वापस करना ठीक है। मैं उम्मीद करता हूं कि # 2 डोडी हो, क्योंकि अस्थायी const int& x
तक सीमित हो सकता है, जिस स्थिति में अपना पता लेने की कोशिश की जा रही है, यह एक खराब योजना प्रतीत होगी। मुझे यकीन नहीं है कि # 4 - मेरा आंत महसूस यह है कि यह भी संभावित रूप से डोडी है, लेकिन मुझे यकीन नहीं है। विशेष रूप से, मैं क्या निम्नलिखित मामले में क्या होगा पर स्पष्ट नहीं कर रहा हूँ:
const int& m(const int& x) { return x; }
//...
const int& r = m(23);
आप MSVC++ का उपयोग कर रहे हैं? – Nawaz
@ नवाज: मैं बड़े कोड-बेस पर प्रश्न लिखने के लिए .QL का उपयोग कर रहा हूं :) मुझे नहीं लगता कि यह किस कंपाइलर से कोई फर्क नहीं पड़ता, मैं आदर्श रूप से एक मंच-स्वतंत्र उत्तर की तलाश में हूं। –
मैंने क्यों पूछा क्योंकि एमएसवीसी ++ कंपाइलर एक्सटेंशन प्रदान करता है जो अस्थायी को गैर-कॉन्स्ट संदर्भों से जुड़ने की अनुमति देता है। और यदि आप माइक्रोसॉफ्ट स्टेटिक विश्लेषण उपकरण का उपयोग कर रहे हैं, तो यह इस एक्सटेंशन पर भी विचार कर सकता है। – Nawaz