यदि आप किसी भी पॉइंटर को सी ++ स्ट्रीम में रखते हैं, तो इसका पता आउटपुट में डाल दिया जाएगा। (जाहिर है जब तक कि वहाँ एक अधिक विशिष्ट उत्पादन हैंडलर है।)सी ++ धाराओं में पॉइंटर आउटपुट को अक्षम करना?
void* px = NULL;
const char* ps = "Test";
FooType* pf = ...;
stringstream s;
s << ps << " " << px << " " << pf "\n";
s.str(); // yields, for example: "Test 0 AF120089"
यह एक समस्या हो सकती है, यदि उपयोगकर्ता ग़लती से वास्तव में FooType की मूल्य मुद्रित करने के लिए कोशिश कर रहा था।
और यह भी एक समस्या है जब विस्तृत चार और संकीर्ण चार मिश्रण है, क्योंकि एक संकलक त्रुटि के बजाय है, तो आप पता मुद्रित कर देंगे:
const wchar_t* str = L"Test! (Wide)";
// ...
cout << str << "\n"; // Ooops! Prints address of str.
तो मैं सोच रहा था - के बाद से मैं बहुत मुश्किल से ही चाहते हैं सूचक सूचक को आउटपुट करने के लिए, पॉइंटर मानों के स्वरूपण को अक्षम करना संभव होगा, ताकि स्ट्रीम में पॉइंटर मान डालने से एक कंपाइलर त्रुटि हो सके? (मेरे अपने शून्य प्रदान करके अक्षम करने शून्य * उत्पादनNeil's answer के प्रकाश में *: (सूचक मूल्यों की outputting तो आसानी से एक आवरण प्रकार का उपयोग कर या कास्टिंग सूचक मान size_t या somesuch करने के द्वारा प्राप्त किया जा सकता है।)
संपादित करें आउटपुट ऑपरेटर) मैं यह जोड़ना चाहूंगा कि यह अच्छा होगा अगर यह Boost.Format जैसे टूल के लिए भी काम करता है, जो std
नेमस्पेस में परिभाषित आउटपुट ऑपरेटर का अंतर्निहित उपयोग करता है ...
हमम ... यह ठीक दिखता है। "सामान्य" शून्य * आउटपुट ऑपरेटर नामस्थान std में परिभाषित किया गया है, नहीं? तो अगर कोई कोड है जो std से किसी का उपयोग करता है, तो इससे मदद नहीं मिलेगी ...? –
किंडा काम करता है, लेकिन औपचारिक रूप से आपको कम से कम एक उपयोगकर्ता परिभाषित पैरामीटर प्रकार के बिना ऑपरेटरों को अधिभारित करने की अनुमति नहीं है। –
@ बो और आपको क्या लगता है ओस्ट्रीम है? –