ड्राफ्ट C ++ 17 मानक दस्तावेज़ से:
30.4.3 नैरो स्ट्रीम ऑब्जेक्ट्स [संकीर्ण.स्ट्रीम .objects]
istream cin;
1 ऑब्जेक्ट (30.11.1) में घोषित cin
ऑब्जेक्ट से जुड़े स्ट्रीम बफर से इनपुट को नियंत्रित करता है ।stdin
<cstdio>
2 वस्तु cin
के आरंभिक होने के बाद , cin.tie()
रिटर्न &cout
। इसकी स्थिति अन्यथा basic_ios<char>::init
(30.5.5.2) के लिए आवश्यक है ।
ostream cout;
3 ऑब्जेक्ट (30.11.1) में घोषित cout
ऑब्जेक्ट से जुड़े स्ट्रीम बफर को आउटपुट नियंत्रित करता है ।stdout
<cstdio>
ostream cerr;
4 ऑब्जेक्ट cerr
आउटपुट से संबंधित ऑब्जेक्ट के साथ जुड़े स्ट्रीम बफर को नियंत्रित करता है stderr
, जिसमें घोषित किया गया है<cstdio>
(30.11.1) ।
5 ऑब्जेक्ट cerr
को इनिशियलाइज़ करने के बाद , cerr.flags() & unitbuf
नॉनज़रो और cerr.tie()
रिटर्न होता है &cout
। इसकी स्थिति अन्यथा basic_ios<char>::init
(30.5.5.2) के लिए आवश्यक है ।
ostream clog;
6 ऑब्जेक्ट (30.11.1) में घोषित clog
ऑब्जेक्ट से जुड़े स्ट्रीम बफर को आउटपुट नियंत्रित करता है ।stderr
<cstdio>
चर्चा ...
cout
को लिखता है stdout
; cerr
और clog
करने के लिएstderr
मानक आउट ( stdout
) का उद्देश्य कार्यक्रम से गैर-त्रुटि, गैर-नैदानिक आउटपुट प्राप्त करना है, जैसे कि सफल प्रसंस्करण से आउटपुट जो अंतिम-उपयोगकर्ता को प्रदर्शित किया जा सकता है या कुछ और प्रसंस्करण चरण में स्ट्रीम किया जा सकता है।
stderr
नैदानिक त्रुटि के लिए मानक त्रुटि ( ) का इरादा है, जैसे कि चेतावनी और त्रुटि संदेश जो प्रोग्राम को इंगित करता है कि उपयोगकर्ता ने अपेक्षित आउटपुट का उत्पादन नहीं किया है या नहीं किया है। यह इनपुट अंतिम उपयोगकर्ता को भी दिखाया जा सकता है, भले ही आउटपुट डेटा को आगे की प्रक्रिया के चरण में ले जाया गया हो।
cin
और cerr
बंधे हुए हैंcout
cout
I / O संचालन से निपटने से पहले वे दोनों फ्लश करते हैं। यह सुनिश्चित करता है कि भेजे गए संकेत cout
प्रोग्राम ब्लॉक से इनपुट को पढ़ने से पहले दिखाई दे रहे हैं cin
, और इससे पहले के आउटपुट के cout
माध्यम से एक त्रुटि लिखने से पहले फ्लश किया जाता है cerr
, जो संदेशों को अपनी पीढ़ी के कालानुक्रमिक क्रम में रखता है जब दोनों को एक ही टर्मिनल / फ़ाइल / के लिए निर्देशित किया जाता है आदि..
इसके साथ विरोधाभास है clog
- अगर आप लिखते हैं कि यह बफ़र नहीं किया जाएगा और किसी भी चीज़ से बंधा नहीं होगा, तो यह फ्लशिंग करने से पहले सभ्य आकार की लॉगिंग को बफर कर देगा। यह संदेशों के उच्चतम थ्रूपुट की पैदावार करता है, लेकिन इसका मतलब यह है कि टर्मिनल को पढ़ने वाले या लॉग को टेल करने वाले उपभोक्ता को संदेश जल्दी से दिखाई नहीं दे सकते हैं।
stdout
,stdin
(के लिएcin
), औरstderr
यह कि वह डिफ़ॉल्ट रूप से उपयोग करता है। मेरा माननाclog
है कि बसcerr
एक बफ़रिंग परिवर्तन के साथ है।