एक अभिन्न लगातार अभिव्यक्ति के रूप में, संकलक कार्यक्रम से निकालने के लिए निरंतर तह उपयोग करने के लिए हर अधिकार है। यह केवल तभी सच नहीं है जब आप इसका पता लेते हैं। इसके अलावा, एक आधुनिक अनुकूलन संकलक सीटी और सी 4 के साथ ऐसा करने के लिए एलटीओ, इनलाइनिंग और निरंतर फोल्डिंग को नियोजित कर सकता है, यदि यह संभव हो।
आप एक चर के पते नहीं लेते हैं, संकलक, यह आवंटित करने के लिए के रूप में करता है, तो नियम के तहत अगर यह बराबर परिणामों के साथ कोड उत्पन्न कर सकते हैं कोई दायित्व नहीं है।
संपादित करें: लगातार फोल्डिंग वह है जहां संकलक रन-टाइम के बजाय संकलन-समय पर अभिव्यक्तियों का मूल्यांकन करता है। उदाहरण के लिए, आप कानूनी रूप से int x[3 + 4];
कर सकते हैं जहां संकलन-समय पर 3 + 4
का मूल्यांकन किया जाता है। कुछ उदाहरण, विशेष रूप से आईसीई से जुड़े, मानक अनिवार्य हैं, लेकिन यदि संभव हो तो कार्यान्वयन अधिक प्रदर्शन कर सकता है। एलटीओ लिंक टाइम ऑप्टिमाइज़ेशन है, जहां संकलक एक साथ जुड़े हुए हैं, जब संकलक अनुवाद इकाइयों में अनुकूलन करता है।
इसका मतलब है कि संकलक शरीर my_f
की लगातार (शरीर के आधार पर) लगातार गुना यह जहाँ भी यह प्रयोग किया जाता है में इनलाइन कर सकते हैं, और फिर इसे बाहर गुना c3
एक निरंतर अभिव्यक्ति बनाने के लिए, और फिर और इसे आवंटित नहीं। c4
के लिए, एलटीओ निरंतर अभिव्यक्ति के रूप में c4
का मान उत्पन्न कर सकता है, इस स्थिति में इसे लगातार फोल्ड और हटाया जा सकता है।
सी ++ में constexpr
फ़ंक्शंस हैं जो इस क्षेत्र में और अधिक करने की अनुमति देते हैं।
'c2' के साथ क्या हुआ? –