2010-11-05 15 views
5

मैं cin.getline के तकनीकी कारण और global getline फ़ंक्शन विभिन्न स्थानों पर होने के तकनीकी कारणों के बारे में उत्सुक हूं।std :: cin.getline में std :: string लेने के लिए oveloaded विधि क्यों नहीं है?

//THESE TWO EXIST 
istream& cin::getline (char* s, streamsize n); 
istream& cin::getline (char* s, streamsize n, char delim); 

//THESE TWO COULD EXIST 
istream& cin::getline (string &s); 
istream& cin::getline (string &s, char delim); 

यह था क्योंकि अन्य प्रकार जोड़े जाने के लिए चाहते हो सकता है और वे शादी करने के लिए स्ट्रिंग CIN नहीं करना चाहता था:

बस CIN के लिए इन सभी समारोह हस्ताक्षर को परिभाषित नहीं के लिए प्रेरणा क्या था?

+0

संभावित डुप्लिकेट [क्यों std :: fstream कक्षाएं std :: string नहीं लेती हैं?] (Http://stackoverflow.com/questions/32332/why-dont-the-stdfstream-classes-take- ए-स्टडस्ट्रिंग) – wilhelmtell

+0

@ विल्हेल्मटेल: यह एक पूरी तरह से अलग सवाल की तरह लगता है। – UncleBens

+0

@UncleBens सवाल बहुत समान है, भले ही नाम अलग हैं। जवाब (लगभग) समान होना चाहिए। – wilhelmtell

उत्तर

4

a similar question के लिए मेरा उत्तर देखें। यह सी ++ मानक समिति द्वारा निरीक्षण किया जा सकता है, लेकिन इसे निर्भरता चिंताओं के साथ भी समझाया जा सकता है। यदि <iostream> हेडर में मानक को std::string के लिए फ़ंक्शन ओवरलोड की आवश्यकता होगी तो इसे में <iostream> में कार्यान्वयन करने की आवश्यकता होगी। यह एक निर्भरता आवश्यकता है, जो <iostream> की आवश्यकता वाले किसी भी संकलन को धीमा कर देगी - भले ही संकलन इकाई को std::string की आवश्यकता न हो।

ध्यान दें कि दूसरी ओर <string> शीर्षलेख में ऐसे कार्य हैं जो std::basic_istream<> और std::basic_ostream<> का संदर्भ लेते हैं; लेकिन मानक को <iosfwd> नामक एक शीर्षलेख की भी आवश्यकता होती है जो सभी आईओ सुविधाओं को अग्रेषित करता है, <string> हेडर संकलन-समय तेज़ <iosfwd> शीर्षलेख पर भरोसेमंद हैडर बनाता है। एक निर्भरता दूसरी तरफ संकलन करने के लिए बहुत धीमी होगी।

4

अधिक या कम। "वे" शायद std::istreamstd::string पर किसी भी तरह से नहीं चाहते हैं, शायद coupling को कम करने के लिए।

ध्यान दें कि <string> मॉड्यूल में परिभाषित किया गया है।

0

कई स्थानों पर जहां सी ++ मानक समिति मानक पुस्तकालय में सुविधाओं के बीच बातचीत का अनुकूलन वास्तव में नहीं किया हैं।

std :: स्ट्रिंग और लाइब्रेरी में इसका उपयोग इनमें से एक है।

एक अन्य उदाहरण std :: स्वैप है। कई कंटेनरों के पास एक स्वैप सदस्य फ़ंक्शन है, लेकिन std :: swap का कोई अधिभार नहीं है। std :: sort के लिए भी यही है।

मुझे आशा है कि ये सभी छोटी चीजें आगामी मानक में तय की जाएंगी।

-Christopher

इस पोस्ट मुझे लगता है कि अन्य सूत्र में पाया क्योंकि यह प्रासंगिक लगता है और एक जवाब को स्वीकार जोड़ा जा रहा है।

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