मेरी टिप्पणियों पर विस्तार करने के लिए, उस पुस्तक का पाठ अस्पष्ट है जो इस मुद्दे को मानता है।
जैसा कि मैंने टिप्पणी की, वह पुस्तक यह कहने की कोशिश कर रही है, "चलिए हर कल्पनीय C ++ फ़ंक्शन को लिखने के लिए अनंत संख्या में बंदर मिलते हैं, जो कभी भी लिखा जा सकता है। ऐसे मामले होंगे जहां हम एक चर चुनते हैं जो (कुछ विशेष फ़ंक्शन बंदरों ने लिखा है। उपयोग करता है, हम यह काम नहीं कर सकते कि क्या फ़ंक्शन उस चर को बदल देगा। "
निश्चित रूप से किसी भी आवेदन में कुछ (यहां तक कि कई) कार्यों के लिए, यह संकलक द्वारा निर्धारित किया जा सकता है, और बहुत आसानी से। लेकिन सभी के लिए (या सबसे जरूरी नहीं)।
इस फ़ंक्शन का आसानी से विश्लेषण किया जा सकता है:
static int global;
void foo()
{
}
"फू" स्पष्ट रूप से "वैश्विक" को संशोधित नहीं करता है। यह बिल्कुल भी कुछ भी संशोधित नहीं करता है, और एक संकलक इसे बहुत आसानी से काम कर सकता है।
इस फ़ंक्शन का विश्लेषण नहीं किया जा सकता है:
static int global;
int foo()
{
if ((rand() % 100) > 50)
{
global = 1;
}
return 1;
चूंकि "फू" की क्रियाएं एक मूल्य पर निर्भर करती हैं, जो रनटाइम में बदल सकती है , इसलिए इसे संकलन समय पर निर्धारित नहीं किया जा सकता है कि क्या यह "वैश्विक" को संशोधित करेगा।
यह पूरी अवधारणा कंप्यूटर वैज्ञानिकों की तुलना में समझने के लिए बहुत सरल है। यदि फ़ंक्शन रनटाइम में बदल सकता है, तो आप कुछ अलग कर सकते हैं, तो आप यह नहीं कर सकते कि यह क्या करता है जब तक यह चलता है, और हर बार जब यह चलता है तो यह कुछ अलग कर सकता है। यह असंभव है या नहीं, यह स्पष्ट रूप से असंभव है।