2013-01-24 16 views
19

सी ++ मानक [सेकंड 5.7] कहते हैं:क्या एक गैर-सरणी प्रकार का "एक-अतीत-अंत-अंत" सूचक सी ++ में मान्य अवधारणा है?

यदि दोनों सूचक संकार्य और एक ही सरणी वस्तु के तत्वों के परिणाम बिंदु, या एक अतीत सरणी वस्तु के अंतिम तत्व, मूल्यांकन नहीं किया जाएगा एक अतिप्रवाह पैदा करें; अन्यथा, व्यवहार अपरिभाषित है।

तो, क्या मैं यह मानने में सही हूं कि अन्य प्रकार के पॉइंटर्स अतीत की तुलना में एक-अतीत के अंतहीन हैं?

उदाहरण के लिए:

int a = 0; 
vector<int> v(&a, (&a)+1); 

ऊपर टुकड़ा संकलित करता है तथा (++ जी के साथ) बस ठीक काम करता है, लेकिन यह मान्य है?

+0

मैं इस बारे में टिप्पणी करना चाहूंगा कि 'एरे के मुकाबले अन्य प्रकार के पॉइंटर्स एक-अतीत-अंत-अंत को अनिर्धारित हैं?'। ** पॉइंटर्स ** हमेशा परिभाषित किए जाते हैं, क्योंकि वे केवल संख्याएं, पते हैं। हालांकि इस सूचक द्वारा ** मान ** अनिर्धारित है। आपको इन पॉइंटर्स को अव्यवस्थित नहीं करना चाहिए। लेकिन 'वेक्टर' कन्स्ट्रक्टर उन्हें कम नहीं करता है, तो यह ठीक है। – NIA

+0

सच है, लेकिन पता स्थान अनंत नहीं है। तो पता स्थान में अंतिम तत्व के लिए एक सूचक है। उस सूचक को बढ़ाने से कोई मतलब नहीं होगा। –

+7

पॉइंटर्स केवल संख्या नहीं हैं। सी ++ मानक यह स्पष्ट करता है कि आप पॉइंटर्स के साथ मनमाने ढंग से अतिरिक्त और घटाव का उपयोग नहीं कर सकते हैं। विशेष रूप से 1-आधारित एल्गोरिदम को समायोजित करने के लिए किसी सरणी से पहले पॉइंटर का उपयोग करने का अभ्यास अपरिभाषित व्यवहार का कारण बनता है। AFAIK कंप्यूटर आर्किटेक्चर होने या उपयोग करने के लिए उपयोग किया जाता है, जहां एक मान लोड करना जो पॉइंटर रजिस्टर में मान्य मेमोरी को इंगित नहीं करता है, वह जाल पैदा कर सकता है। – JoergB

उत्तर

25

नहीं, यह कानूनी है। 5.7 (4) - आपके उद्धरण से पहले एक पैराग्राफ - कहता है: "इन ऑपरेटरों के प्रयोजनों के लिए, एक गैर-ऑब्जेक्ट ऑब्जेक्ट के लिए पॉइंटर ऑब्जेक्ट के प्रकार के साथ लंबाई की सरणी के पहले तत्व के सूचक के समान व्यवहार करता है इसके तत्व प्रकार के रूप में। "

+0

का मतलब है "मान्य", "कानूनी" नहीं, मुझे लगता है। अन्यथा बहुत से प्रोग्रामर को जेल जाना पड़ सकता है। –

+0

हां। सी ++ भाषा विनिर्देश के अनुसार 'कानूनी' = "वैध," – JoergB

+0

जोर्जबी: धन्यवाद! मैं पूरी तरह से उस वाक्य को याद किया। –