2015-01-07 9 views
5
#include<iostream> 
using namespace std; 

class Test 
{ 
public: 
    Test(){} 
    Test(int param):i(param){} 
    int i; 
}; 

int main() 
{ 

    Test obj1(100); 
    //Test obj2[100](obj1) ; - This doesn't work I know 
    Test obj3[10] = obj1; //This works 
    cout<<obj3[9].i<<endl; 
    return 1; 
} 

ऊपर कोड Test obj2[100](obj1); में काम नहीं करता है, लेकिन Test obj3[10] = obj1;बुरा सरणी प्रारंभ बनाम काम प्रतिलिपि निर्माता प्रारंभ

पूर्व समर्थित लेकिन बाद क्यों है। (दोनों प्रतिलिपि निर्माता बुला लिया जाएगा।)

क्या यह है कि पूर्व में कंपेलरों में कार्यान्वयन बाधाओं के कारण समर्थित नहीं है?

संपादित करें: मैं C++ 11 का उपयोग नहीं कर रहा हूं। जीसीसी संस्करण 4.8.2 (i686-POSIX-बौना-Rev3, MinGW-W64 परियोजना द्वारा निर्मित) क्यूटी 5.3.1

किसी भी निष्कर्ष?

+0

यह काम नहीं करता है क्योंकि इसकी अनुमति नहीं है। '()' मान-प्रारंभिकता है जब तक कि यह एक सरणी न हो, तब कार्यक्रम खराब हो गया है। –

+0

@Puppy शब्दों को कम नहीं करें; हमें बताएं कि आप वास्तव में देशी सरणी के बारे में कैसा महसूस करते हैं = पी – WhozCraig

+0

'परीक्षण obj3 [10] = obj1; // यह काम करता है - वास्तव में? मोड (सी ++ 11 या अन्यथा) के बावजूद इस पर 3.5 चट्टानों को झुकाएं। – WhozCraig

उत्तर

1

मैं मुख्य रूप से आपकी आखिरी टिप्पणी का उत्तर दे रहा हूं, क्योंकि सभी तत्व पहले ही टिप्पणियों में दिए गए थे।

हम क्या देख सकते हैं:

  • पहले वाक्य रचना Test obj2[100](obj1); क्योंकि ... यह C++ भाषा के लिए विवरण इस प्रकार नहीं है परीक्षण किया सभी compilers द्वारा त्रुटि के रूप में अस्वीकार कर दिया है!
  • दूसरा वाक्यविन्यास Test obj2[100] = obj1; वर्तमान विनिर्देशों के लिए स्पष्ट रूप से उपयुक्त प्रतीत नहीं होता है क्योंकि आप एक तत्व के साथ एक सरणी प्रारंभ करते हैं। उस पर अधिक:
    • बजना (और MSVC) उस पर संघर्ष करेंगे: वे घुंघराले ब्रेसिज़ की आवश्यकता होती है और उसके बाद ही पहला तत्व को प्रारंभ (होगा: Test obj2[100] = {obj1};)
    • जीसीसी (4.5 4.9 करने के लिए) यह स्वीकार करता है और के सभी तत्वों को आरंभीकृत obj1

की एक प्रति के साथ सरणी मेरे राय है कि यह स्पष्ट नहीं है कि के रूप में यह सही सी ++ और के रूप में यह कुछ भारी इस्तेमाल किया सी ++ compilers पर त्रुटियों का कारण बनता है, तो आप भी दूसरा वाक्य विन्यास का उपयोग करने के लिए, जब तक से बचना चाहिए है लाल चमकती फ़ॉन्ट में दस्तावेज।

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