जब मैं सी ++ मानक पढ़ रहा हूं, ऐसा लगता है कि निम्न कोड मानक के अनुसार बिल्कुल ठीक है।स्केलर प्रकार w/o प्रारंभकर्ता के ऑब्जेक्ट के दायरे में कूदना ठीक क्यों है?
int main() {
goto lol;
{
int x;
lol:
cout << x << endl;
}
}
// OK
[n3290: 6.7/3]: यह एक ब्लॉक में स्थानांतरित करना संभव है, लेकिन एक तरह से है कि आरंभीकरण साथ घोषणाओं नजरअंदाज में नहीं। एक प्रोग्राम है जो एक बिंदु से कूदता है जहां स्वचालित भंडारण अवधि के साथ एक चर है एक बिंदु जहां यह दायरे में है करने के लिए दायरे में नहीं बीमार का गठन है जब तक चर अदिश प्रकार, एक छोटी सी डिफ़ॉल्ट निर्माता के साथ वर्ग प्रकार है और एक छोटा विनाशक, में से एक का सीवी-योग्य संस्करण, या में से किसी एक की सरणी और प्रारंभकर्ता के बिना घोषित किया गया है।
यह क्यों काम करना चाहिए? क्या इसकी परिभाषा पर कूदने और अपरिभाषित x
का उपयोग करना अभी भी खतरनाक नहीं है? और प्रारंभकर्ता के अस्तित्व को कोई फर्क क्यों पड़ता है?
लेकिन समस्या यह है कि, एक प्रारंभकर्ता है, एक्स को परिभाषित नहीं किया गया है क्योंकि इसकी परिभाषा वैसे भी बाईपास की गई है। यही है ना –
@EricZ: परिभाषा अभी भी होती है। 'गोटो' एक रनटाइम चीज है, यह केवल प्रारंभिक व्यवहार जैसे रनटाइम व्यवहार को छोड़ देता है। – GManNickG
@GMan, ठीक है! धन्यवाद;) –