यह रास्ता धारा manipulators काम करते हैं। मैनिपुलेटर ऐसे कार्य हैं जो ऑपरेटर < < को तर्क के रूप में पास करते हैं। फिर ऑपरेटर के भीतर उन्हें बस बुलाया जाता है।
तो तुम समारोह की तरह
template <class charT, class traits>
basic_ostream<charT,traits>& endl(basic_ostream<charT,traits>& os);
घोषित है और आप ऑपरेटर < < करने के लिए अपने सूचक गुजरती हैं। और ऑपरेटर इस तरह
ostream& ostream::operator << (ostream& (*op)(ostream&));
कुछ घोषित अंदर समारोह called.like
return (*endl)(*this);
इस प्रकार जब आप रिकॉर्ड
std::cout << std::endl;
देखना है तो std::endl
समारोह सूचक है कि करने के लिए पारित हो जाता है है तर्क के रूप में operator <<
।
रिकॉर्ड में
std::endl(std::cout);
नामस्थान उपसर्ग से पहले नाम endl
इस मामले में क्योंकि छोड़ा जा सकता है संकलक तर्क आश्रित लुक का प्रयोग करेंगे। इस प्रकार यह रिकॉर्ड
endl(std::cout);
सफलतापूर्वक संकलित होगा।
लेकिन अगर तो कोष्ठक में समारोह नाम संलग्न करने ADL नहीं किया जाता है और निम्नलिखित रिकॉर्ड
(endl)(std::cout);
संकलित नहीं होंगे।
स्रोत
2015-03-27 07:22:15
[नामस्थानों के साथ कंपाइलर के दिलचस्प व्यवहार] के समान [http://stackoverflow.com/q/25976267/1708801) –