हाँ यह कर सकते हैं।
अधिकांश consts पूरी तरह से प्रोग्रामर के लाभ के लिए हैं और कंपाइलर को ऑप्टिमाइज़ करने में मदद नहीं करते हैं क्योंकि यह उन्हें हटाने के लिए कानूनी है और इसलिए वे कंपाइलर को अनुकूलन के लिए उपयोगी कुछ भी नहीं बताते हैं। हालांकि, कुछ 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... लेकिन असली कंपाइलर नहीं कर सकते।