यह काम करने की गारंटी है: तार्किक और और अभिव्यक्ति श्रृंखलाओं का मूल्यांकन बाएं से दाएं से किया जाता है, और यदि पहला उप-संपीड़न स्थिति को पूरा करता है, तो कोई और सबएक्सप्रेस का मूल्यांकन नहीं किया जाता है।
अपने मामले में, यदि currentNode
शून्य है, तो इसे दूसरे उप-संपीड़न द्वारा कभी भी संदर्भित नहीं किया जाएगा, इसलिए कोड सुरक्षित है।
रूप @jdv हालांकि कहे अनुसार, इस कहा जाता है शॉर्ट सर्किट मूल्यांकन, नहीं आलसी मूल्यांकन। उत्तरार्द्ध एक प्रोग्रामिंग तकनीक है जहां आप क्लाइंट के लिए पारदर्शी रूप से, केवल आवश्यक समय की गणना करते हैं जब इसे ठोस रूप से जरूरी होता है। एक साधारण उदाहरण:
class Example {
SomeClass *theObject = null;
public:
SomeClass *getTheObject() {
if (!theObject) {
theObject = doResourceConsumingCalculation();
}
return theObject;
}
};
ध्यान दें कि Example
की ग्राहक कार्यान्वयन विस्तार है कि theObject
lazily मूल्यांकन किया जाता है के बारे में पता है, तो आप की सार्वजनिक इंटरफ़ेस को प्रभावित किए बिना आगे और पीछे उत्सुक और आलसी मूल्यांकन के बीच परिवर्तित करने के लिए स्वतंत्र हैं कक्षा।
(बेशक, वास्तविक उत्पादन कोड में, getTheObject
एक अलग cpp फ़ाइल में लागू किया जाना चाहिए, और यह शायद तुल्यकालन, त्रुटि हैंडलिंग कोड आदि को शामिल करना चाहिए यह सिर्फ एक साधारण उदाहरण :-)
स्रोत
2011-01-06 09:44:37
यह हमेशा काम करेगा, लेकिन यह अभी भी एक बुरा विचार हो सकता है। :) कोड का मूल्यांकन करने के लिए अधिक संदर्भ की आवश्यकता है। –
@ करल: आपको इसके बारे में क्या बुरा लगता है। –
यह ** खराब हो सकता है, * संदर्भ * के आधार पर, कि 'currentNode' पहले स्थान पर एक सूचक है, या यह शून्य होने की अनुमति है, या तर्क इस तरह से काम करता है, या ... –