क्यानए int और new (int) के बीच C++ में क्या अंतर है?
int * num = new (int);
और
int * num = new int;
के बीच का अंतर है?
क्या कोई अंतर है?
EDIT thx सब। ... सबसे सही उत्तर है?
क्यानए int और new (int) के बीच C++ में क्या अंतर है?
int * num = new (int);
और
int * num = new int;
के बीच का अंतर है?
क्या कोई अंतर है?
EDIT thx सब। ... सबसे सही उत्तर है?
आपके उदाहरण के संदर्भ में कोई अंतर नहीं है (int प्रकार का उपयोग करके)। हालांकि, यदि आपको कंपाउंड प्रकारों की ऑब्जेक्ट्स बनाने की आवश्यकता है, तो आपको एक अंतर है, जहां आपको कोष्ठक संस्करण का उपयोग करने की आवश्यकता है। अर्थात:
int (**fn_ptr_ok)() = new (int (*[10])()); // OK
int (**fn_ptr_err)() = new int (*[10])(); // error
इस विशेष मामले के लिए, कोई अंतर नहीं। दोनों एक ही हैं। बस उस पहले वाक्यविन्यास का शायद ही कभी उपयोग किया जाता है, शायद क्योंकि यह असुविधाजनक और गुप्त दिखता है, और अधिक टाइपिंग की आवश्यकता होती है!
इस प्रश्न के मामले में, इन दो new
के अर्थ समान हैं। व्याकरणिक रूप से, पूर्व प्रारूप new()
का ऑपरेंड टाइप-आईडी, है और बाद वाला ऑपरेंड नया-प्रकार-आईडी है। नए-प्रकार-आईडी के लिए, यदि (....)
ऑपरेंड के पीछे दिखाई देता है, तो यह कन्स्ट्रक्टर की तर्क सूची के रूप में व्याख्या किया गया है। यही है, अगर हम new int(1)
लिखते हैं, तो int
को 1 में प्रारंभ किया गया है, दूसरी ओर, टाइप-आईडी के लिए, यदि (....)
प्रकट होता है, तो यह प्रकार का एक हिस्सा है। उदाहरण के लिए, जब हम new
फ़ंक्शन के लिए पॉइंटर करते हैं, तो हमें new(type-id)
फ़ॉर्म का उपयोग करना होगा। उदाहरण के लिए, new(int(*)())
के रूप में।
मुझे लगता है कि मैं समझ गया कि आप क्या कहने की कोशिश कर रहे थे। मुझे अपने मन पढ़ने के कौशल पर गर्व है। – log0
जब आप एक गतिशील सरणी
int n = 2;
int *p = new int[n]; // valid
int *q = new (int[n]); // invalid
parenthesized संस्करण एक निरंतर आकार की आवश्यकता है बनाना चाहते हैं, वहाँ एक और अंतर है।
दूसरे के लिए, आपको अभी भी 'हटाएं []', हाँ का उपयोग करने की आवश्यकता है? –
@ चार्ल्स हां आपको 'हटाएं [] 'का उपयोग करने की आवश्यकता है। –
इसलिए यदि 'n' स्थिर है, तो दूसरा एक ऑब्जेक्ट (नहीं n) के लिए स्थान आवंटित करने के बराबर है, जिसमें 'int arr [n]' के समान प्रकार है? सही? – UmmaGumma
(वास्तव में एक जवाब है, लेकिन मैं इस एक टिप्पणी में नहीं डाल सकते)
इसके और भी अधिक है क्योंकि "नया स्थान" के जटिल: http://codepad.org/pPKt31HZ
#include <stdio.h>
void* operator new(size_t N, int x) {
return new char[N];
}
int main(void) {
int x = int();
int* a = new(int()) int;
}
यहाँ अपनी दिलचस्प है कि जीसीसी इसे स्वीकार करता है, लेकिन एमएस/इंटेल नहीं।
यह कार्य करने के लिए 10 पॉइंटर्स की सरणी है (जो int वापस आती है और कोई तर्क नहीं लेती)। इसे देखें: http://ieng9.ucsd.edu/~cs30x/rt_lt.rule.html – sinek