हाँ यह कर सकते हैं।
अधिकांश const
s पूरी तरह से प्रोग्रामर के लाभ के लिए हैं और कंपाइलर को ऑप्टिमाइज़ करने में मदद नहीं करते हैं क्योंकि यह उन्हें हटाने के लिए कानूनी है और इसलिए वे कंपाइलर को अनुकूलन के लिए उपयोगी कुछ भी नहीं बताते हैं। हालांकि, कुछ const
एस (कानूनी रूप से) दूर नहीं हो सकते हैं और ये कंपाइलर को अनुकूलन के लिए उपयोगी जानकारी प्रदान करते हैं।
एक उदाहरण के रूप में, एक const
प्रकार के साथ परिभाषित वैश्विक वैरिएबल तक पहुंच को इनलाइन किया जा सकता है, जबकि एक const
प्रकार के बिना एक इनबिल्ट नहीं किया जा सकता है क्योंकि यह रनटाइम में बदल सकता है।
https://godbolt.org/g/UEX4NB
सी ++:
int foo1 = 1;
const int foo2 = 2;
int get_foo1() {
return foo1;
}
int get_foo2() {
return foo2;
}
एएसएम:
foo1:
.long 1
foo2:
.long 2
get_foo1():
push rbp
mov rbp, rsp
mov eax, DWORD PTR foo1[rip] ; foo1 must be accessed by address
pop rbp
ret
get_foo2():
push rbp
mov rbp, rsp
mov eax, 2 ; foo2 has been replaced with an immediate 2
pop rbp
ret
व्यावहारिक रूप से, ध्यान रखें कि const
प्रदर्शन में सुधार करते समय , ज्यादातर मामलों में यह नहीं होगा या नहीं, लेकिन परिवर्तन ध्यान देने योग्य नहीं होगा। की प्राथमिक उपयोगिता const
अनुकूलन नहीं है।
स्टीव जेसप मूल प्रश्न पर अपनी टिप्पणी में एक और उदाहरण देते हैं जो कुछ उल्लेख करने लायक है। ब्लॉक स्कोप में, कंपाइलर के लिए यह सुनिश्चित करना संभव है कि अगर कोई वैरिएबल म्यूट किया जाएगा और उसी के अनुसार ऑप्टिमाइज़ किया जाएगा const
, क्योंकि कंपाइलर वेरिएबल के सभी उपयोगों को देख सकता है। इसके विपरीत, ऊपर के उदाहरण में, यह भविष्यवाणी करना असंभव है कि क्या foo1
इसे अन्य अनुवाद इकाइयों में संशोधित किया जा सकता है। मुझे लगता है कि एक काल्पनिक भावुक अल्ट्रा-कंपाइलर एक पूरे कार्यक्रम का विश्लेषण कर सकता है और यह निर्धारित कर सकता है कि क्या यह इनलाइन एक्सेस के लिए वैध है foo1
... लेकिन असली कंपाइलर नहीं कर सकते।