दिलचस्प पोस्ट
पायथन का प्रयास करें-दूसरा PHP पूर्णांक ओवरफ़्लो को बल दें पायथन स्ट्रिंग प्रिंट के रूप में CSS3 में अवरोही ढाल प्रभाव पायथन नेस्टेड फ़ंक्शंस में स्थानीय चर सबसे भ्रामक पार्स के बारे में एक भ्रमित विवरण मेरी जावास्क्रिप्ट और सीएसएस फ़ाइलों के आकार को कम करने का सबसे अच्छा तरीका क्या है? यह C ++ स्निपेट संकलित क्यों करता है (गैर-शून्य फ़ंक्शन किसी मान को वापस नहीं करता) स्विच विजेट का आकार कैसे बदला जाए C ++ में INI फ़ाइल को पार्स करने का सबसे आसान तरीका क्या है? ऊपर या नीचे टेस्ट लूप्स? (जबकि बनाम करते हैं) दो नक्शे मर्ज करने और एक ही कुंजी के मूल्यों का योग करने का सर्वोत्तम तरीका है? पीएचपी में छवि से सफेद स्थान का फसल करें बड़े स्थानिक स्तरों पर ए * एल्गोरिथ्म को गति कैसे करें? वसंत MVC नियंत्रक में JSON पैरामीटर

क्यों स्ट्रिंग स्ट्रीम की अनुमति नहीं है?

int main() { std::stringstream s1("This is my string."); std::stringstream s2 = s1; // error, copying not allowed } 

मुझे कोई कारण नहीं मिल सका है कि मैं स्ट्रेंस्ट्रीम क्यों कॉपी नहीं कर सकता क्या आप कुछ संदर्भ प्रदान कर सकते हैं?

वेब के समाधान से एकत्रित समाधान "क्यों स्ट्रिंग स्ट्रीम की अनुमति नहीं है?"

C ++ में किसी भी स्ट्रीम की कॉपी प्रतिलिपि कन्स्ट्रक्टर private बनाने के द्वारा अक्षम है

कोई भी अर्थ है, चाहे वह stringstream , istream , stringstream , istream या जो भी हो

स्ट्रीम की प्रतिलिपि अक्षम कर दी गई है क्योंकि यह समझ नहीं आता है। यह समझने में बहुत ही बहुत महत्वपूर्ण है कि धारा का क्या मतलब है, वास्तव में समझने के लिए क्यों स्ट्रीम की प्रतिलिपि समझ नहीं पाती है stream एक कंटेनर नहीं है जो आप की प्रतिलिपि बना सकते हैं। इसमें डेटा शामिल नहीं है

यदि कोई सूची / वेक्टर / मैप या कोई कंटेनर एक बाल्टी है, तो स्ट्रीम एक नली है जिसके माध्यम से डेटा प्रवाह होता है स्ट्रीम के बारे में कुछ पाइप के रूप में सोचें, जिसके माध्यम से आप डेटा प्राप्त करते हैं; एक पाइप – एक तरफ स्रोत (प्रेषक) है, दूसरी ओर सिंक (रिसीवर) है। इसे यूनिडायरेक्शनल स्ट्रीम कहा जाता है इसमें द्विदिश प्रवाह भी हैं, जिनके माध्यम से डेटा दोनों दिशाओं में बहता है। तो क्या ऐसी बात की एक प्रति बनाने के लिए समझ में आता है? इसमें कोई भी डेटा शामिल नहीं है। यह जिसके माध्यम से आप डेटा प्राप्त करते हैं

अब थोड़ी देर के लिए लगता है कि धारा की प्रतिलिपि बनाने की अनुमति है, और आपने std::cin की एक प्रति बनाई है जो वास्तव में इनपुट स्ट्रीम है। कहो कॉपी किया गया ऑब्जेक्ट copy_cin अब खुद से पूछिए: क्या यह copy_cin स्ट्रीम से डेटा को पढ़ने के लिए समझ में आता है जब बहुत ही डाटा std::cin. से पहले ही पढ़ा जा चुका है std::cin. नहीं, यह समझ में नहीं आता है, क्योंकि उपयोगकर्ता ने केवल एक बार डेटा दर्ज किया था, कीबोर्ड (या इनपुट डिवाइस) ने केवल एक बार बिजली के संकेतों को उत्पन्न किया था और वे केवल एक बार अन्य सभी हार्डवेयर और निम्न स्तरीय एपीआई के माध्यम से प्रवाहित होते थे आपका प्रोग्राम इसे दो बार या उससे अधिक कैसे पढ़ सकता है?

इसलिए, प्रतिलिपि बनाने की अनुमति नहीं है, लेकिन संदर्भ बनाने की अनुमति है:

 std::istream copy_cin = std::cin; //error std::istream & ref_cin = std::cin; //ok 

यह भी ध्यान रखें कि आप स्ट्रीम का दूसरा उदाहरण बना सकते हैं और इसे उसी अंतर्निहित बफर का उपयोग कर सकते हैं जो पुराने स्ट्रीम वर्तमान में उपयोग कर रही है। इसे देखें: https://ideone.com/rijov

प्रश्न का सीधे उत्तर देने के लिए, आप प्रतिलिपि नहीं कर सकते क्योंकि स्ट्रिंगस्ट्रीम श्रेणी के लिए प्रतिलिपि निर्माता को निजी के रूप में घोषित किया गया है

यह संभवतः इस तरह से घोषित किया गया था क्योंकि अधिकांश मामलों में एक स्ट्रीम की प्रतिलिपि बनाने के लिए यह अजीब लगता है, इसलिए धारा वर्गों में से कोई भी सार्वजनिक प्रतिलिपि निर्माणकर्ता नहीं है

जैसा कि ऊपर उल्लेख किया गया है आप स्ट्रीम की प्रतिलिपि नहीं कर सकते हैं, लेकिन अगर आपको इसकी आवश्यकता है तो आप डेटा को कॉपी कर सकते हैं:

 std::stringstream from; std::stringstream to; std::copy(std::istream_iterator<char>(from), std::istream_iterator<char>(), std::ostream_iterator<char>(to));