Avatar ·

अनुक्रम बिंदु (sequence points) क्या हैं और वे C++ में अपरिभाषित व्यवहार (undefined behavior) से कैसे संबंधित हैं?

सभी को नमस्कार! मैं एक शुरुआती C++ डेवलपर हूँ और हाल ही में मैं 'अनुक्रम बिंदु' (sequence points) की अवधारणा से परिचित हुआ हूँ। कई फ़ोरम पर लिखा है कि अनुक्रम बिंदुओं के नियमों का उल्लंघन करने से अपरिभाषित व्यवहार (undefined behavior) होता है, लेकिन मैं पूरी तरह से नहीं समझता कि व्यवहार में इसका क्या मतलब है। यहाँ एक सरल उदाहरण है जो मुझे भ्रमित करता है: ```cpp int i = 0; int result = i++ + i++; ``` मैंने कहीं पढ़ा था कि ऐसा कोड अपरिभाषित व्यवहार का कारण बनता है। लेकिन क्यों? पहली नज़र में ऐसा लगता है कि परिणाम अनुमानित होगा: पहले `i` का पुराना मान (0) लिया जाता है, फिर इसे बढ़ाया जाता है, और ऐसा दो बार होता है। मुझे उम्मीद थी कि `result` `0 + 1 = 1` होगा, और `i` `2` हो जाएगा। लेकिन कंपाइलर कहता है कि यह UB है। एक और उदाहरण: ```cpp int arr[5] = {0}; int i = 0; arr[i] = i++; ``` यहाँ मैं एक एरे एलिमेंट को वैल्यू असाइन कर रहा हूँ, जिसमें इंडेक्स खुद बदल रहा है। मुझे समझ नहीं आता कि इंडेक्स का कौन सा मान उपयोग होगा—पुराना या नया? और इसे खतरनाक क्यों माना जाता है? क्या आप