2012-12-20 56 views
11
class A 
{ 
public: 
    A(){} 

private: 
    int i; 
}; 

A a[8]; 

सी ++ 11 मानक 8.5.1.1 कहते हैं:किसी भी प्रकार की सरणी हमेशा एक समग्र है?

"एक कुल एक सरणी या एक वर्ग कोई उपयोगकर्ता द्वारा प्रदान की कंस्ट्रक्टर्स (12.1), कोई ब्रेस या equalinitializers के लिए साथ (धारा 9) है गैर स्थैतिक डेटा सदस्य (9.2), कोई निजी या संरक्षित गैर स्थैतिक डेटा सदस्य (खंड 11), कोई आधार वर्ग (क्लॉज 10), और कोई वर्चुअल फ़ंक्शन (10.3) नहीं। "

एक सरणी के रूप में, कुल मिलाकर है? मुझे नहीं लगता, लेकिन मानक हां कहता है।

+11

यदि मानक कहता है, मानक जीतता है :) – Gorpik

+1

@Gorpik सभी हिप्पो-मानक की जय हो! : डी –

उत्तर

14

हाँ, A[8] एक समग्र प्रकार, भले ही A नहीं है।

कुल की धारणा (जैसे कि "तुच्छता copyable") कुछ अन्य संबंधित विचार के विपरीत, सकर्मक नहीं है।

शिथिल बोल, इस किस्म के प्रारंभ किया जा रहा है एक समग्र केवल प्रभावों, और इस प्रकार यह सकर्मक होने की जरूरत नहीं है। A की प्रकृति पर प्रतिबंध लगाने की आवश्यकता के बिना आप A a[2] = { A('x', true), A(1, 2, 3) }; कह सकते हैं। इसके विपरीत, छोटी प्रतिलिपि जैसी धारणाएं कक्षा के मेमोरी लेआउट से संबंधित होती हैं और इस प्रकार उनकी प्रकृति द्वारा संक्रमणीय होना चाहिए।

+0

@BenVoigt: सच है। मैंने इसे जाँचा था। मैं गलत था। – Nawaz