2014-10-30 8 views
23

मुझे एक कक्षा मिली है जिसने असाइन operator& ओवरलोड किया है। उस प्रकार की वस्तुओं को new का उपयोग करके बनाया गया था, इसलिए चर का पता सुलभ था लेकिन अब मुझे स्थिर वस्तु का उपयोग करने की आवश्यकता है। क्या इसका पता प्राप्त करना संभव है?सी ++ ऑपरेटर के बिना वैरिएबल का पता प्राप्त करें और

+1

* असाइन * ऑपरेटर और वास्तव में अधिभारित है? –

+0

@ फ्रेडलार्सन मैं भी आश्चर्यचकित था: http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Member_and_pointer_operators – KugBuBu

+0

@ कुगबुबु: हाँ, मैंने देखा कि इसे ओवरलोड किया जा सकता है। लेकिन सवाल इस बात पर स्पष्ट नहीं है कि वास्तव में इस मामले में अधिभारित है। मैंने कक्षा अधिभार बाइनरी 'ऑपरेटर' देखा है (कहें, स्ट्रिंग concatenation के लिए)। यूनरी ऑपरेटर को अधिभारित करना असामान्य है। –

उत्तर

37

में उपयोग कर सकते हैं सी ++ 11 या बाद में, std::addressof(object), <memory> हैडर द्वारा घोषित।

ऐतिहासिक रूप से, यह अधिक अजीब था, खासकर यदि आप const और volatile क्वालीफायर से सही तरीके से निपटना चाहते थे। एक addressof की बूस्ट के कार्यान्वयन के द्वारा प्रयोग किया संभावना है

reinterpret_cast<T*>(
    &const_cast<char&>(
     reinterpret_cast<const volatile char &>(object))) 

पहले qualifers को जोड़ते समय तो char& को बदलने कि reinterpret_cast काम करेगा लेकिन object योग्य थे, फिर उन्हें हटा दें ताकि अंतिम रूपांतरण काम करेगा; फिर अंत में पता लेना और सही प्रकार में परिवर्तित करना। जब तक T में object (जो object से निकाले गए टेम्पलेट पैरामीटर के रूप में होगा) के समान क्वालीफायर हैं, परिणामी सूचक सही ढंग से योग्य होंगे।

+8

यह भी है कि कैसे 'std :: addressof' जीसीसी – Brian

+1

द्वारा कार्यान्वित किया गया है और वीसी ++ के लिए काफी समान कार्यान्वयन है। – Niall

संबंधित मुद्दे