Wednesday 15 May 2013

mfc - CString : What does (TCHAR*)(this + 1) mean? -


सीएसटीआईआर हेडर फाइल में (यह माइक्रोसॉफ्ट या ओपन फाउंडेशन क्लासेस -), निम्न कोड स्निपेट है

<पूर्व> स्ट्रेट CStringData {लंबे समय तक nRefs; Int nDataLength; Int nAllocLength; टीसीएचएआर * डेटा () {रिटर्न (टीसीएचआर *) (और यह [1]); }; ...};

(टीसीएचआर *) (और यह [1]) क्या इंगित करता है?

CStringData struct का उपयोग CString वर्ग (http: // www.koders.com/cpp/fid100CC41B9D5E1056ED98FA36228968320362C4C1.aspx) में किया जाता है।

किसी भी मदद की सराहना की जाती है।

सीएसटीआईआर के पास बहुत से आंतरिक चाल है जो इसे सामान्य पारित होने की तरह दिखते हैं printf फ़ंक्शंस के लिए, वास्तव में वर्ग होने के बावजूद तर्क सूची में LPCTSTR को डालने के बिना, उदाहरण के लिए varargs < / कोड> ( ... ) उदा एक printf इस प्रकार CString कार्यान्वयन में एक एकल चाल या फ़ंक्शन को समझने की कोशिश करना बुरी खबर है (डेटा फ़ंक्शन आंतरिक फ़ंक्शन होता है जो स्ट्रिंग के साथ जुड़े 'असली' बफर हो जाता है।)

इसमें कोई पुस्तक है, जो उसमें जाती है, और आईएआरसी ब्लैज़कज़क पुस्तक इसे छू सकती है।

संपादित करें: कच्चे सी ++: -

  टीसीएचएआर * डेटा () {रिटर्न (टीसीएचएआर *) (और यह [1] ); };  

यह कहता है, "आप वास्तव में एक साथ आबंटित वस्तुओं की सरणी में पहली प्रविष्टि हैं। अब, दूसरी वस्तु वास्तव में एक CString नहीं है, यह सामान्य है एनयूएल ने यूनिकोड या सामान्य वर्णों के बफर को बंद कर दिया है - यानी, एक एलपीटीआरएसटी "।

एक ही बात को व्यक्त करने का दूसरा तरीका यह है:

  TCHAR * डेटा () {return ( टीसीएचएआर *) (यह + 1); };  

जब आप टी को एक सूचक में जोड़ते हैं, तो आप वास्तव में 1 * आकार के टी को एक कच्चे स्मृति पते के रूप में जोड़ते हैं। इसलिए अगर किसी के पास 0x00000010 पर sizeof (CString) = 4 पर स्थित है, तो डेटा 0x00000014 से शुरू होने वाले वर्ण बफर के एक NUL टर्मिनेंट सरणी में एक सूचक वापस करेगा

लेकिन केवल एक बात को संदर्भ के बाहर समझना नहीं है जरूरी एक अच्छा विचार है।

आप की आवश्यकता क्यों जानते हो?


No comments:

Post a Comment