दो कॉल के अलग-अलग अर्थ हैं जिनका प्रदर्शन से कोई लेना-देना नहीं है; तथ्य यह है कि यह निष्पादन समय को गति देता है (या हो सकता है ) सिर्फ एक साइड इफेक्ट है। आपको समझना चाहिए कि उनमें से प्रत्येक क्या करता है और आँख बंद करके उन्हें हर कार्यक्रम में शामिल नहीं करता है क्योंकि वे एक अनुकूलन की तरह दिखते हैं।
ios_base::sync_with_stdio(false);
यह C और C ++ मानक धाराओं के बीच सिंक्रनाइज़ेशन को अक्षम करता है। डिफ़ॉल्ट रूप से, सभी मानक धाराएँ सिंक्रनाइज़ की जाती हैं, जो व्यवहार में आपको C- और C ++ - शैली I / O को मिलाने और समझदार और अपेक्षित परिणाम प्राप्त करने की अनुमति देती हैं। यदि आप सिंक्रनाइज़ेशन को अक्षम करते हैं, तो C ++ स्ट्रीम को अपने स्वयं के स्वतंत्र बफ़र्स रखने की अनुमति है, जो C- और C ++ - शैली I / O को एक साहसिक मिश्रण बनाता है।
यह भी ध्यान रखें कि सिंक्रनाइज़ सी ++ स्ट्रीम थ्रेड-सुरक्षित हैं (विभिन्न थ्रेड से आउटपुट इंटरलेव हो सकता है, लेकिन आपको कोई डेटा दौड़ नहीं मिलती है)।
cin.tie(NULL);
इससे अनहोनी cin
होती है cout
। बंधी हुई धाराएं यह सुनिश्चित करती हैं कि एक स्ट्रीम दूसरे स्ट्रीम पर प्रत्येक I / O ऑपरेशन से पहले अपने आप फ्लश हो जाए।
डिफ़ॉल्ट रूप cin
से cout
एक समझदार उपयोगकर्ता बातचीत सुनिश्चित करने के लिए बंधा हुआ है । उदाहरण के लिए:
std::cout << "Enter name:";
std::cin >> name;
यदि cin
और cout
बंधा हुआ है, तो आप प्रोग्राम को उपयोगकर्ता से इनपुट के संकेत देने से पहले आउटपुट को फ्लश कर सकते हैं (यानी, कंसोल पर दिखाई दे रहे हैं)। यदि आप धाराएँ खोलते हैं, तो प्रोग्राम उपयोगकर्ता के नाम के लिए प्रतीक्षा करने को अवरुद्ध कर सकता है, लेकिन "नाम दर्ज करें" संदेश अभी तक दिखाई नहीं दे रहा है (क्योंकि cout
डिफ़ॉल्ट रूप से बफ़र किया गया है, आउटपुट फ्लश किया जाता है / केवल मांग पर या कंसोल पर प्रदर्शित किया जाता है। बफर भर गया है)।
इसलिए यदि आप से अनटाइट करते cin
हैं cout
, तो आपको cout
इनपुट पर अपेक्षा करने से पहले हर बार मैन्युअल रूप से फ्लश करना सुनिश्चित करना चाहिए cin
।
निष्कर्ष में, जानें कि उनमें से प्रत्येक क्या करता है, परिणामों को समझें, और फिर तय करें कि क्या आप वास्तव में चाहते हैं या गति सुधार के संभावित दुष्प्रभाव की आवश्यकता है ।