40

मानक सी ++ लाइब्रेरी में सभी नाम std::ios_base::Init को छोड़कर लोअरकेस हैं। ऐसा क्यों है?std :: ios_base :: इनिट अपरकेस में "इनिट" क्यों है?

+0

मैं कहूंगा कि यह केवल इसलिए है क्योंकि यह आईओ धाराओं के लिए बहुत महत्वपूर्ण प्रारंभिक, रखरखाव और सफाई कार्य करता है। यह उस संबंध में अद्वितीय है, इसलिए इसे पूंजी मिली। – IVlad

+1

पिछड़ा संगतता। –

+1

क्योंकि नामकरण सम्मेलन और वास्तव में सी ++ में नाम एक पूर्ण शंबल हैं, जैसे कि वे सी – EJP

उत्तर

22

iostream कक्षाएं आप देख सकते हैं कि ios_base मूल रूप से उपस्थित नहीं था का एक प्रारंभिक draft में, basic_ios आधार वर्ग था और Init और अन्य सदस्यों, जो बाद में ios_base में अलग हो गए थे लिए जिम्मेदार था।

basic_ios भी था (और still has) एक init समारोह, और जब दो नाम जरूरी अलग होने के लिए नहीं था, शायद कोशिश करते हैं और भ्रम की स्थिति यह वर्ग Init और समारोह init नाम के लिए निर्णय लिया गया से बचने के लिए। इसके अलावा, निम्नलिखित की तरह इस तरह के अंतर कुछ बिना आवश्यक हो गया होता जब वर्ग का उपयोग कर:

struct ios_base 
{ 
    struct init{}; 
    void init(); 
}; 

ios_base::init i1;  // error 
struct ios_base::init i2; // ok 

एक अलग वर्ग मानक धाराओं आरंभ करने के लिए जिम्मेदार करने का विचार कम से कम CFront 3.0 को जाता है, के रूप में देखा जा सकता है Iostream_init द्वारा this शीर्षलेख में। कुछ बिंदु पर यह निर्णय लिया गया कि न केवल कक्षा को ios/basic_ios/ios_base का सदस्य बनाएं, लेकिन इसका नाम Init रखा जाना चाहिए।

किसी भी मामले में दोनों को असंतोष करना समझ में आता है, इस तथ्य पर विचार करते हुए कि उन्हें अंततः अलग-अलग वर्गों में रखा गया था। वे इसके बजाय पूरी तरह से अलग नाम चुन सकते थे, लेकिन संभावित रूप से Init/init को कक्षा और कार्य करने का वर्णन करने के लिए सबसे अच्छा अर्थपूर्ण विकल्प माना जाता था, और यह भी एक मौका है कि यह पुराने Iostream_init की नकल कर रहा था, जिसके कारण किसी कारण से भी शुरू होता है एक अपरकेस I

+1

"है" बहुत मजबूत है, लेकिन हां, बेस क्लास के सदस्य वर्ग के समान नाम के साथ एक सदस्य कार्य उस सदस्य वर्ग को छुपाएगा। – hvd

+2

हम्म ... पूर्व-मानक libstdC++ कार्यान्वयन का निरीक्षण, जो सी ++ 9 8 मानक के विकास के विकास में था, वहां एक बिंदु था जहां 'आईओएस' कक्षा थी जिसमें 'इनिट' और 'इनिट' दोनों शामिल थे। उस बिंदु पर, अलग-अलग नाम बिल्कुल जरूरी थे, न कि सिर्फ अच्छा है। – hvd

+1

@ एचवीडी मैंने आपकी टिप्पणी के उत्तर का जवाब दिया है, इनिट/इनिट भेद वास्तव में दूर के अतीत से एक आर्टेफैक्ट प्रतीत होता है। मैं यह इंगित करना चाहता हूं कि एक ही नाम के साथ एक समारोह और एक वर्ग अभी भी एक ही दायरे में खुशी से सह-अस्तित्व में रह सकता है। – user657267

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