मेरा मानना है कि इस सवाल का सही जवाब है कि, बस कारण है कि संकलक नहीं (सामान्य रूप से) बूलियन मूल्यांकन का अनुकूलन करता है तार्किक लघु सर्किटिंग के लिए, उदाहरण के लिए:
if (GetFlagA() || GetFlagB())
{
...do something
}
कि के आदेश अगर मूल्यांकन वास्तव में कोई फर्क कर सकते हैं अगर GetFlagA बुला कुछ है कि GetFlagB पर निर्भर करता है को संशोधित करता है (दी इस वास्तव में बुरा कोड अभ्यास है, लेकिन यह एक अलग के लिए एक अलग विषय है थ्रेड।) यहां समस्या तार्किक लघु सर्किटिंग है, अगर GetFlagA चलता है और सत्य देता है, तो प्राप्त करें फ्लैगब कभी नहीं चलेगा, जैसा कि यहां देखा गया है GetFlagB का नतीजा कथन के मूल्यांकन के लिए अपरिहार्य है।
ए | बी | =
एफ | एफ | एफ
एफ | टी | टी
टी | एफ | बी के रिटर्न वैल के बावजूद टी सच है।
टी | टी | बी के रिटर्न वैल के बावजूद टी सच है।
तो संक्षेप में, पूछें कि क्या आप डेमोरगन या किसी भी चीज़ का उपयोग कर अनुकूलित कर सकते हैं, वास्तव में बाकी कंप्यूटर विज्ञान और सॉफ्टवेयर इंजीनियरिंग की तरह ही है। "निर्भर करता है।" यदि आप गैर-कार्यात्मक मूल्यांकन का उपयोग कर रहे हैं, तो इसे शायद अनुकूलित किया जा सकता है। ईमानदारी से आप एक बेहद तेज़ मंच पर कुछ परिचालनों की बात कर रहे हैं, तो आप अपना समय लेखन दस्तावेज खर्च करने से बेहतर होंगे।
मुझे उम्मीद है कि इससे मदद मिलती है।
+1। मैं अक्सर अपने कोड में बूलियन परीक्षण को अनुकूलित करता हूं, विशेष रूप से पठनीयता के लिए। – Cheeso
कंपाइलर्स? होशियार? – Kekoa
एक कंपाइलर अलग-अलग समय पर मूल्यांकन किए बिना अभिव्यक्ति के तर्क को अनुकूलित नहीं कर सकता है। फिरोजो का जवाब देखें। यह जानना काफी समझदार हो सकता है कि यह पर्याप्त स्मार्ट नहीं है। – Kekoa