मानें someClass
कुछ विधि int doSomething(void)
के साथ सी # में परिभाषित एक वर्ग है, और सादगी के लिए, कोई कन्स्ट्रक्टर कोई तर्क नहीं ले रहा है। फिर, सी # में, उदाहरणों जीसी ढेर पर बनाया जाना है:,उलझन में: उदाहरण के लिए C++
someClass c; // legit, but only a null pointer in C#
// c->doSomething() // would not even compile.
c = new someClass(); // now it points to an instance of someclass.
int i = c->doSomething();
अब अगर someClass
कुछ नेट पुस्तकालय में संकलित किया गया है, तो आप भी C++/CLI में इसका इस्तेमाल कर सकते हैं:
someClass^ cpp_gcpointer = gcnew someClass();
int i = cpp_gcpointer->doSomething();
इतना आसान है! निफ्टी! यह निश्चित रूप से प्रोजेक्ट में .Net लाइब्रेरी का संदर्भ मान लिया गया है और घोषणा का उपयोग करके संबंधित है।
यह मेरी समझ है कि यह पिछले सी # उदाहरण के सटीक सी ++/सीएलआई समतुल्य है (एक पंक्ति में घुलनशील, यह वह बिंदु नहीं है जिसमें मुझे रूचि है)। सही बात? (क्षमा करें, मैं विषय के लिए नए हूँ)
सी ++ में, हालांकि, यह भी
someClass cpp_cauto; // in C++ declaration implies instantiation
int i = cpp_cauto.doSomething();
मान्य सिंटैक्स है। जिज्ञासा से, मैंने आज कोशिश की। मेरे कंधे पर देखकर एक सहयोगी, शर्त लगाने के लिए तैयार था कि वह संकलित भी नहीं होगा। वह शर्त खो देता। (यह अभी भी सी # असेंबली से कक्षा है)। दरअसल यह पिछले उदाहरणों के कोड के रूप में भी उसी परिणाम i
का उत्पादन करता है।
निफ्टी भी, लेकिन - उहम्म - यह वास्तव में क्या है, यहां क्या बनाया गया है? मेरा पहला जंगली अनुमान था कि मेरी पीठ के पीछे, नेट गतिशील रूप से जीसी ढेर पर एक उदाहरण बनाता है और cpp_auto
इस ऑब्जेक्ट के लिए किसी प्रकार का आवरण है, जो someClass
वर्ग के उदाहरण की तरह वाक्य रचनात्मक रूप से व्यवहार करता है। लेकिन तब मैं इस पृष्ठ
पाया http://msdn.microsoft.com/en-us/library/ms379617%28v=vs.80%29.aspx#vs05cplus_topic2
यह पृष्ठ मुझे बताने की, कि (कम से कम, अगर SomeClass थे एक सी ++ वर्ग) cpp_auto
वास्तव में ढेर, पर बनाई गई है, जो मेरी जानकारी के लिए, हो सकता है लगता है शास्त्रीय सी ++ में आपको वही व्यवहार मिलता है। और कुछ ऐसा जो आप सी # में नहीं कर सकते (आप नहीं कर सकते, क्या आप कर सकते हैं?)। मैं क्या जानना चाहता हूं: क्या सी # असेंबली का उदाहरण भी ढेर पर बनाया गया है? क्या आप सी ++ में स्टेक पर क्लास इंस्टेंस के साथ नेट बाइनरी का उत्पादन कर सकते हैं जिसे आप सी # में नहीं बना सकते हैं? और क्या यह संभवतः आपको एक परफॉर्मेंस लाभ भी दे सकता है :-)?
सधन्यवाद,
थॉमस
ओच। तो मुझे इसे पहचानने के बिना जवाब मिला। मुझे यह इंगित करने के लिए धन्यवाद :-) – Thomas
@ थॉमस कोई समस्या नहीं। यह एक बड़ा पृष्ठ है - आपको यह पता होना चाहिए कि कंपाइलर चालबाजी पर चर्चा खोजने के लिए क्या देखना है;) –
फिर से धन्यवाद, लेकिन ठीक है, आप देखते हैं, ऐसा इसलिए नहीं है क्योंकि यह एक बड़ा पृष्ठ है। मुद्दा यह है कि जब आप मुझे इंगित करते हैं कि मैं अपने प्रश्न का उत्तर देता हूं तो मैं उद्धरण को समझता हूं। लेकिन शायद यह केवल शुरुआती अज्ञान है। और फिर, ज़ाहिर है, अज्ञान आनंद है :-) – Thomas