2013-10-17 7 views
8

मान लें कि आपके पास कक्षा (सी ++) या मॉड्यूल (एकल सी फ़ाइल) है। फिर अपने कार्यों में से एक में आप एक चर की एक प्रति स्टोर करना चाहते हैं और अगली बार फ़ंक्शन कहलाए जाने तक अपना मान धारण करना चाहते हैं, क्या यह वैश्विक होना बेहतर है (सी ++ में निजी हो सकता है और सी में बाहर नहीं रखा जा सकता है यह मॉड्यूल स्कोप में) या एक स्थानीय स्थैतिक चर बनाते हैं?एक स्थिर चर बनाने के लिए क्या स्थानीय स्थिर चर या वैश्विक होना बेहतर है?

उदा .:

void some_func_that_does_not_do_anything_useful(int arbVal) 
{ 
    static int lastArbVal = 0; 

    if (arbVal > lastArbVal) 
    { 
     lastArbVal = arbVal; 
    } 
} 

कारण मैं एक स्थिर के रूप में संभव के रूप में सीमित इसके दायरे में रखने के लिए है, लेकिन कुछ बातें मैंने पढ़ा है तो आप इस के लिए वैश्विक का उपयोग करना चाहिए का सुझाव होगा, इसलिए अब मैं उलझन में हूँ।

सबसे अच्छा क्या है (यदि कोई है) ?, पेशेवर/विपक्ष?

+2

यदि आप केवल उस फ़ंक्शन में इसका उपयोग करते हैं, और कहीं और नहीं, तो इसे 'स्थिर' बनाना शायद सबसे अच्छा समाधान है। यद्यपि आप बहु-थ्रेडिंग जैसे मामलों के बारे में सोचना चाहते हैं, क्योंकि स्थिर चर सभी धागे के बीच साझा किया जाएगा। –

+0

encapsulation के हित में एक स्थानीय स्थैतिक सबसे अच्छा होगा। यह भी कई सी कार्यों का दृष्टिकोण है। 'स्ट्रोक' दिमाग में आता है। – Adam

+1

'स्ट्रोक' मैन पेज से उद्धरण के लिए: "इन कार्यों का कभी भी उपयोग न करें"। चलिए इसका उपयोग उदाहरण के रूप में नहीं करते हैं :-) –

उत्तर

10

यहां नियम सरल है: यदि चर को एक से अधिक कार्यों तक पहुंचाया जाना है, तो इसे वैश्विक बनाएं। यदि नहीं, static फ़ंक्शन के अंदर चर आमतौर पर बेहतर होते हैं। पेशेवरों में से एक यह वैश्विक नामस्थान प्रदूषण से बचाता है।

ध्यान दें कि यदि एक वैश्विक चर फ़ाइल के बाहर पहुँचा जा करने की जरूरत नहीं है, यह फाइल गुंजाइश चर के रूप में यह घोषणा करने के लिए बेहतर है (यानी, यह static के रूप में घोषित)

अपने उदाहरण पर वापस, मुझे लगता है static वैरिएबल का उपयोग करना सबसे अच्छा है जैसा आपने पहले ही किया है।

+1

फ़ाइल-स्कोप 'स्थिर' का एक विकल्प एक अनाम नामस्थान है। – juanchopanza

+2

एक और कारण फ़ाइल स्कोप 'स्थिर 'उपयुक्त नहीं हो सकता है स्थिर प्रारंभिक क्रम है। यदि इसका उपयोग करने वाले फ़ंक्शन को विभिन्न अनुवाद इकाइयों से अन्य statics के प्रारंभ के दौरान कहा जाता है, तो आप परेशानी में हैं। – jrok

संबंधित मुद्दे