सारांश
यह पाठ पाठ्यक्रम की तीसरी इकाई को समाप्त करता है, जो व्यंजकों और उनके संक्रियकों को समर्पित है। यह अवधारणाओं की उस शृंखला को फिर से गढ़ता है जो अंकगणितीय संक्रियक से लाइब्रेरी फ़ंक्शन तक जाती है, और रास्ते में व्यंजक वृक्ष और हर नोड का प्रकार, शर्तें और उनका बीजगणित, शॉर्ट-सर्किट गणना, साइड इफ़ेक्ट और गणना का क्रम, तथा बिट आते हैं; इनमें से जो किसी भी भाषा में लागू होता है उसे C++ की अपनी विशेषताओं से अलग करता है; इकाई के अपरिभाषित व्यवहार को एकत्र करता है, साथ में यह भी कि कंपाइलर क्या पकड़ता है, डिटेक्टर क्या पकड़ता है और क्या कोई नहीं पकड़ता; समापन मूल्यांकन में प्रवेश मूल्यांकन के कौशल दोहराता है; और छह चुनौतियों के साथ समाप्त होता है जो पूरी इकाई को जोड़ती हैं।
अधिगम उद्देश्य
- पाठ्यक्रम के किसी भी व्यंजक का मान, प्रकार और प्रभाव उसके वृक्ष और हर नोड पर होने वाले रूपांतरणों से पहले ही बताना।
- संयुक्त शर्तें लिखना और उनका निषेध करना, और शॉर्ट-सर्किट गणना से ऐसी संक्रिया की रक्षा करना जो अन्यथा अर्थहीन होती।
- अर्थहीन व्यंजकों (इकाई के अपरिभाषित व्यवहार की सूची) को पहचानना, यह बताना कि हर एक को कौन-सा साधन पकड़ता है, और उन्हें अपरिभाषित व्यवहार के बिना फिर से लिखना।
- किसी दी गई गणना के लिए अंकगणित, बिट संक्रियकों और गणितीय लाइब्रेरी में से चुनना, और चुनाव का औचित्य देना।
- इकाई में सीखी गई बातों में से जो किसी भी भाषा में लागू होता है उसे C++ की अपनी विशेषताओं से अलग करना।
इकाई की उपलब्धियाँ
इस इकाई का लक्ष्य ऐसे व्यंजक बनाना सिखाना था जिनका मान निश्चितता से पहले ही बताया जा सके: कौन-सी संक्रिया पहले होती है, परिणाम किस प्रकार का है, उसके कौन-से साइड इफ़ेक्ट हैं और कौन-से व्यंजक अर्थहीन हैं। यह लक्ष्य केवल उन बातों के सहारे पूरा हुआ जिन्हें परिचय ने ज्ञात घोषित किया था: इकाई 2 के प्रकार, उनकी मानों की परास और उनके रूपांतरण। छह प्रश्नों वाला वह प्रोग्राम, जिससे परिचय ने समस्या रखी थी, अब वैसे पढ़ा जा सकता है जैसे कंपाइलर उसे पढ़ता है, और एक-एक व्यंजक करके सुधारा जा सकता है।
अंकगणितीय संक्रियाएँ
पाठ अंकगणितीय संक्रियाएँ ने पाँच अंकगणितीय संक्रियकों का सटीक व्यवहार स्थापित किया। पूर्णांक विभाजन शून्य की ओर छाँटता है और जब तक भागफल अर्थपूर्ण है, सर्वसमिका (a / b) * b + a % b == a को संतुष्ट करता है, इसलिए शेषफल, जब शून्य न हो, भाज्य का चिह्न रखता है; इसी कारण -7 / 2 का मान है और -7 % 2 का मान है, और विषम होने का प्रश्न n % 2 != 0 से पूछा जाता है। पाठ ने इसे यूक्लिडीय शेषफल ((a % b) + b) % b से जोड़ा, जो होने पर लागू है, और दोनों का उपयोग राशियों को विघटित करने में किया। उसने प्राथमिकता और साहचर्यता के अनुसार व्यंजक का वृक्ष बनाना, और सामान्य अंकगणितीय रूपांतरणों से हर नोड का प्रकार तय करना सिखाया। अंत में उसने अर्थहीन भागफलों (शून्य से पूर्णांक विभाजन, और सबसे छोटे पूर्णांक को से भाग देना) और मध्यवर्ती परिणाम के ओवरफ़्लो की बात की, जो अपरिभाषित व्यवहार के लिए पर्याप्त है, भले ही अंतिम परिणाम समा जाए।
संबंध और तर्क
पाठ संबंध और तर्क ने सिखाया कि शर्त bool प्रकार का एक व्यंजक है, जिसका वृक्ष में अपना स्थान है: संबंधपरक संक्रियक अंकगणित से ढीले बँधते हैं, && || से अधिक कसकर, और ! इन सबसे अधिक कसकर। उसने कथनों को शर्तों में बदलना और उन शर्तों को पहचानना सिखाया जो किसी दूसरे अर्थ के साथ कंपाइल हो जाती हैं, जैसे 1 < x < 5 और day == 6 || 7। उसने दिखाया कि && और || अपने दूसरे संकार्य की गणना तभी करते हैं जब पहला परिणाम तय नहीं करता, और यह शॉर्ट-सर्किट किसी संक्रिया की रक्षा उसके बाईं ओर रखे पहरेदार से करने देता है। अंत में उसने डी मॉर्गन के नियमों की बात की, जो संयुक्त शर्त का निषेध करते हैं, और उनकी सीमा की: किसी अ-संख्या मान के साथ !(a < b) और a >= b समतुल्य नहीं हैं।
असाइनमेंट, साइड इफ़ेक्ट और अपरिभाषित व्यवहार
पाठ असाइनमेंट, साइड इफ़ेक्ट और अपरिभाषित व्यवहार ने व्यंजक के मान को उसके प्रभाव से अलग किया: असाइनमेंट एक व्यंजक है जिसका मान असाइन किया गया मान होता है और जो किसी चर को बदलता है, और x++ का मान पुराना मान है जबकि ++x का मान नया। उसने दिखाया कि व्यंजक का वृक्ष यह तय नहीं करता कि उसकी शाखाओं की गणना किस क्रम में हो, इसलिए एक ही चर पर दो प्रभाव, या एक प्रभाव और एक पठन, जिनके बीच कोई क्रम न हो, व्यंजक को अर्थहीन कर देते हैं; और उसने स्पष्ट किया कि C++17 ने क्या क्रमबद्ध किया और क्या अनिर्दिष्ट छोड़ा। उसने चार स्तरों (परिभाषित, कार्यान्वयन-परिभाषित, अनिर्दिष्ट और अपरिभाषित) की सूची बनाई, समझाया कि कंपाइलर यह मानकर युक्ति करता है कि प्रोग्राम में अपरिभाषित व्यवहार नहीं है, और सूची के हर मामले के लिए बताया कि कौन-सा साधन उसे पकड़ता है।
बिट और गणितीय लाइब्रेरी
पाठ बिट और गणितीय लाइब्रेरी ने सिखाया कि पूर्णांक बिटों का एक अनुक्रम भी है: &, | और ^ हर स्तंभ पर एक तार्किक संयोजक लागू करते हैं, ~ सभी बिट पलट देता है, और शिफ़्ट 2 की घातों से गुणा और भाग करते हैं, इस शर्त के साथ कि शिफ़्ट की मात्रा ऋणात्मक न हो और प्रकार की चौड़ाई तक न पहुँचे। इनसे उसने ऐसे मास्क बनाए जो किसी बिट को जाँचते, सेट करते, हटाते और पलटते हैं। उसने सावधान किया कि ये संक्रियक संबंधपरक संक्रियकों से ढीले बँधते हैं, इसलिए x & 1 == 0 वह नहीं पूछता जो दिखता है, और कि ^ घात नहीं है। अंत में उसने लाइब्रेरी की बात की: <cmath>, <numbers>, <numeric> और <bit> सही और परखी हुई गणनाएँ देते हैं, अपनी-अपनी पूर्व-शर्तों के साथ, जैसे निरपेक्ष मान की पूर्व-शर्त, जो सबसे छोटे पूर्णांक के लिए मौजूद नहीं है।
सामग्री लोड हो रही है…