मुझे मानक में इस बारे में पढ़ना याद था, इसलिए यहाँ जाता है:
C11 मानक देखें जो परिभाषित करता है कि मानक धाराएं कैसे व्यवहार करती हैं, क्योंकि C ++ प्रोग्राम CRT को इंटरफ़ेस करता है, C11 मानक को यहां फ्लशिंग नीति को नियंत्रित करना चाहिए।
आईएसओ / आईईसी 9899: 201x
7.21.3 §7
प्रोग्राम स्टार्टअप पर, तीन पाठ धाराएँ पूर्वनिर्धारित होती हैं और इन्हें स्पष्ट रूप से खोलने की आवश्यकता नहीं होती है - मानक इनपुट (पारंपरिक इनपुट पढ़ने के लिए), मानक आउटपुट (पारंपरिक आउटपुट लिखने के लिए), और मानक त्रुटि (डायग्नोस्टिक आउटपुट लिखने के लिए)। जैसा कि शुरू में खोला गया था, मानक त्रुटि स्ट्रीम पूरी तरह से बफर नहीं है; मानक इनपुट और मानक आउटपुट स्ट्रीम पूरी तरह से बफ़र किए जाते हैं यदि और केवल अगर स्ट्रीम को निर्धारित किया जा सकता है तो एक इंटरैक्टिव डिवाइस को संदर्भित नहीं करना चाहिए।
7.21.3 §3
जब एक धारा अप्रभावित होती है, तो पात्रों को स्रोत से या गंतव्य पर जल्द से जल्द दिखाई देने का इरादा होता है। अन्यथा वर्णों को एक ब्लॉक के रूप में होस्ट वातावरण से संचित या प्रेषित किया जा सकता है। जब एक स्ट्रीम पूरी तरह से बफ़र हो जाती है, तो वर्णों को एक बफर के रूप में होस्ट परिवेश से या एक ब्लॉक के रूप में प्रेषित किया जाता है। जब एक स्ट्रीम लाइन बफ़र की जाती है, तो वर्णों को एक नए-पंक्ति वर्ण का सामना करने पर एक ब्लॉक के रूप में होस्ट वातावरण से या उससे प्रेषित किया जाता है। इसके अलावा, वर्णों को होस्ट वातावरण के लिए एक ब्लॉक के रूप में प्रेषित करने का इरादा है, जब एक बफर भर जाता है, जब इनपुट एक अप्रकाशित स्ट्रीम पर अनुरोध किया जाता है, या जब इनपुट एक लाइन बफ़र स्ट्रीम पर अनुरोध किया जाता है, जिसमें होस्ट वातावरण से वर्णों के प्रसारण की आवश्यकता होती है ।
इसका मतलब यह है कि std::cout
और std::cin
पूरी तरह से बफ़र्ड हैं यदि और केवल अगर वे एक गैर-इंटरैक्टिव डिवाइस का उल्लेख कर रहे हैं। दूसरे शब्दों में, यदि स्टडआउट एक टर्मिनल से जुड़ा हुआ है, तो व्यवहार में कोई अंतर नहीं है।
हालांकि, अगर std::cout.sync_with_stdio(false)
कहा जाता है, तो '\n'
इंटरेक्टिव उपकरणों के लिए भी एक फ्लश का कारण नहीं होगा। अन्यथा फाइलों के लिए पाइपिंग के '\n'
बराबर है std::endl
: c ++ ref on std :: endl ।