बीच क्या अंतर है static const
और const
? उदाहरण के लिए:
static const int a=5;
const int i=5;
क्या उनके बीच कोई अंतर है? आप एक दूसरे का उपयोग कब करेंगे?
बीच क्या अंतर है static const
और const
? उदाहरण के लिए:
static const int a=5;
const int i=5;
क्या उनके बीच कोई अंतर है? आप एक दूसरे का उपयोग कब करेंगे?
जवाबों:
अंतर लिंकेज है।
// At file scope
static const int a=5; // internal linkage
const int i=5; // external linkage
यदि i
ऑब्जेक्ट अनुवाद इकाई के बाहर उपयोग नहीं किया जाता है, जहां इसे परिभाषित किया गया है, तो आपको इसे static
निर्दिष्टकर्ता के साथ घोषित करना चाहिए ।
यह संकलक (संभावित) को और अधिक अनुकूलन करने में सक्षम बनाता है और पाठक को सूचित करता है कि वस्तु का उपयोग इसके अनुवाद इकाई के बाहर नहीं किया गया है।
const int i = 5;
बाहरी संबंध हैं ?? C ++ में यह नहीं है ...
const
का C ++ से कोई लेना-देना नहीं है const
।
static
एक फ़ंक्शन के बाहर दृश्यता या अंदर एक चर जीवनकाल निर्धारित करता है। तो इसका const
प्रति se से कोई लेना देना नहीं है।
const
इसका मतलब यह है कि इसके आरंभ होने के बाद आप मूल्य नहीं बदल रहे हैं।
static
फ़ंक्शन के अंदर का मतलब है कि फ़ंक्शन समाप्त होने से पहले और बाद में चर मौजूद होगा।
static
एक फ़ंक्शन के बाहर का मतलब है कि चिह्नित चिह्न का दायरा static
उस .c फ़ाइल तक सीमित है और इसे बाहर नहीं देखा जा सकता है।
तकनीकी रूप से (यदि आप इसे देखना चाहते हैं), static
एक स्टोरेज स्पेसिफायर है और const
एक प्रकार का क्वालीफायर है।
const int i = 5;
i मान यदि आप एक पॉइंटर का उपयोग करके संशोधित कर सकते हैं यदि मुझे परिभाषित किया गया है और स्थानीय रूप से घोषित किया गया है, अगर यह स्थिर कॉन्स्टेंस int a = 5 है; या const int i = 5; वैश्विक रूप से, आप संशोधित नहीं कर सकते क्योंकि यह डेटा सेगमेंट में आरओ मेमोरी में संग्रहीत है।
#include <stdio.h>
//const int a=10; /* can not modify */
int main(void) {
// your code goes here
//static const int const a=10; /* can not modify */
const int a=10;
int *const ptr=&a;
*ptr=18;
printf("The val a is %d",a);
return 0;
}
यह इस बात पर निर्भर करता है कि ये परिभाषाएँ किसी कार्य के अंदर हैं या नहीं। एक समारोह के बाहर मामले के लिए जवाब ouah द्वारा दिया गया है, ऊपर। किसी फ़ंक्शन के अंदर का प्रभाव अलग होता है, जिसका उदाहरण नीचे दिया गया है:
#include <stdlib.h>
void my_function() {
const int foo = rand(); // Perfectly OK!
static const int bar = rand(); // Compile time error.
}
यदि आप चाहते हैं कि एक स्थानीय चर "वास्तव में स्थिर" हो, तो आपको इसे न केवल "कॉन्स्ट" बल्कि "स्थिर कास्ट" को परिभाषित करना होगा।
foo
वैरिएबल के मामले में हर बार रि-इनिशियलाइज़ किए जाने my_function()
को कहा जाता है, जिसके परिणामस्वरूप एक अलग यादृच्छिक मान असाइन किया जाता है। bar
केवल एक बार शुरू होने वाले चर के मामले में , पहली बार my_function()
कहा जाता है जिसके परिणामस्वरूप कार्यक्रम के जीवनकाल के लिए एक ही मूल्य सौंपा जा रहा है। इसलिए स्थिर भंडारण अवधि।
bar
कारण असाइनमेंट के लिए एक कंपाइल एरर प्राप्त करते हैं rand()
।