मैं आपके प्रश्न का उत्तर देने का प्रयास करूंगा, हालांकि यह एक पुराना प्रश्न है, और यह बहुत महत्वपूर्ण नहीं लगता है (यह वास्तव में अपने आप में बहुत महत्वपूर्ण नहीं है ), और इसे पहले ही काफी अच्छे उत्तर मिल चुके हैं। इसका उत्तर देने का कारण यह है कि यह मानक विकास और भाषा डिजाइन के बुनियादी मुद्दों से संबंधित है जब भाषा मौजूदा भाषा पर आधारित होती है: जब भाषा की विशेषताओं को असंगत तरीके से हटा, हटा या बदल दिया जाना चाहिए?
C ++ में एक प्रतीक की दृश्यता (या तो चर या फ़ंक्शन घोषणा) को प्रभावित करने के लिए एक अनुवाद इकाई के भीतर स्थिर कीवर्ड का उपयोग करना संभव है।
लिंकेज वास्तव में।
N3092 में, यह पदावनत कर दिया गया:
पदावनति इंगित करता है:
- भविष्य में कुछ सुविधा को हटाने का इरादा ; इसका मतलब यह नहीं है कि अगले मानक संशोधन में हटाए गए सुविधाओं को हटा दिया जाएगा, या उन्हें "जल्द", या सभी को हटा दिया जाना चाहिए। और गैर-हटाए गए सुविधाओं को अगले मानक संशोधन में हटाया जा सकता है।
- इसके उपयोग को हतोत्साहित करने का एक औपचारिक प्रयास ।
उत्तरार्द्ध बिंदु महत्वपूर्ण है। हालाँकि, कभी भी कोई औपचारिक वादा नहीं किया जाता है कि आपका कार्यक्रम कभी नहीं टूटेगा, कभी-कभी चुपचाप, अगले मानक के अनुसार, समिति को "उचित" कोड को तोड़ने से बचने की कोशिश करनी चाहिए। डिप्रेसेशन को प्रोग्रामर्स को बताना चाहिए कि कुछ फीचर पर निर्भर रहना अनुचित है ।
हालांकि, यह रेखांकित करता है कि C के साथ संगतता के लिए (और C- प्रोग्रामों को C ++ के रूप में संकलित करने की क्षमता) के लिए प्रतिनियुक्ति कष्टप्रद है। हालाँकि, सी प्रोग्राम को सीधे C ++ के रूप में संकलित करना पहले से ही एक निराशाजनक अनुभव हो सकता है, इसलिए यदि मैं इस पर विचार करता हूं तो मैं अनिश्चित हूं।
विशेष रूप से हेडर फ़ाइलों के लिए C / C ++ सामान्य सबसेट को संरक्षित करना बहुत महत्वपूर्ण है। बेशक, static
वैश्विक घोषणाएं आंतरिक लिंकेज के साथ प्रतीक की घोषणाएं हैं और हेडर फ़ाइल में यह बहुत उपयोगी नहीं है।
लेकिन मुद्दा कभी भी C के साथ संगतता नहीं है, यह मौजूदा C ++ के साथ संगतता है: मौजूदा मान्य C ++ प्रोग्राम के टन हैं जो static
वैश्विक घोषणाओं का उपयोग करते हैं । यह कोड केवल औपचारिक रूप से कानूनी नहीं है, यह ध्वनि है, क्योंकि यह एक अच्छी तरह से परिभाषित भाषा सुविधा का उपयोग करता है जिस तरह से इसका उपयोग करने का इरादा है ।
सिर्फ इसलिए कि अब कुछ करने के लिए एक "बेहतर तरीका" (कुछ के अनुसार) है जो पुराने तरीके से लिखे गए कार्यक्रमों को "बुरा" या "अनुचित" नहीं बनाता है। static
वैश्विक दायरे में वस्तुओं और कार्यों की घोषणाओं पर कीवर्ड का उपयोग करने की क्षमता को C और C ++ दोनों समुदायों में अच्छी तरह से समझा जाता है, और सबसे अधिक बार सही ढंग से उपयोग किया जाता है।
एक समान नस में, मैं सी-स्टाइल कास्ट्स double
को static_cast<double>
सिर्फ इसलिए बदलने नहीं जा रहा हूं क्योंकि "सी-स्टाइल की कास्ट खराब है", जैसा कि static_cast<double>
शून्य जानकारी और शून्य सुरक्षा को जोड़ता है।
यह विचार कि जब भी कुछ करने का नया तरीका ईजाद किया जाता है, तो सभी प्रोग्रामर अपने मौजूदा अच्छी तरह से परिभाषित कामकाजी कोड को फिर से लिखने के लिए दौड़ पड़ेंगे। यदि आप सभी अंतर्निहित C कुरूपता और समस्याओं को दूर करना चाहते हैं, तो आप C ++ को नहीं बदलते हैं, आप एक नई प्रोग्रामिंग भाषा का आविष्कार करते हैं। हाफ हटाने से static
मुश्किल से C ++ कम C- बदसूरत हो जाता है।
कोड परिवर्तन को एक औचित्य की आवश्यकता है, और "पुराना बुरा है" कोड परिवर्तन का औचित्य नहीं है।
भाषा परिवर्तन को तोड़ना एक बहुत ही मजबूत औचित्य की आवश्यकता है। भाषा को थोड़ा सरल बनाना कभी भी एक ब्रेकिंग बदलाव का औचित्य नहीं है।
जो कारण दिए गए static
हैं, वे खराब हैं, बस उल्लेखनीय रूप से कमजोर हैं, और यह भी स्पष्ट नहीं है कि दोनों वस्तुओं और फ़ंक्शन घोषणाओं को एक साथ क्यों नहीं निकाला जाता है - उन्हें अलग-अलग उपचार देने से सी ++ सरल या अधिक ऑर्थोगोनल हो जाता है।
तो, वास्तव में, यह एक दुखद कहानी है। इसके व्यावहारिक परिणामों के कारण नहीं: इसके बिल्कुल शून्य व्यावहारिक परिणाम थे। लेकिन क्योंकि यह आईएसओ समिति से सामान्य ज्ञान की स्पष्ट कमी को दर्शाता है।