2012-01-14 17 views
10

संभव डुप्लिकेट:
What do the following phrases mean in C++: zero-, default- and value-initialization?'मूल्य प्रारंभ करने' का क्या अर्थ है?

अगर मैं उदाहरण के लिए एक वर्ग है:

class Info 
{ 
    int x; 
    int y; 
}; 

जो मैं एक वस्तु बनाने में उपयोग किया,

Info *p = new Info(); 

क्या जानकारी के बगल में ब्रैकेट का मतलब है कि मैं इसे शुरू करने के लिए मूल्यवान हूं? यह Info *p = new Info; से अलग कैसे है?

मुझे पता है कि question है जो नई और पुरानी सी ++ भाषा में अलग-अलग अर्थों के बीच अंतर करता है लेकिन मैं डिफ़ॉल्ट और मूल्य प्रारंभिकरण के बीच अर्थपूर्ण अंतर जानना चाहता हूं। क्या मूल्य प्रारंभिकरण शून्य से कुछ प्रारंभ करना है?

+0

संभावित डुप्लिकेट [निम्न वाक्यांशों का अर्थ सी ++ में क्या है: शून्य-, डिफ़ॉल्ट- और मान-प्रारंभिकरण?] (Http://stackoverflow.com/questions/1613341 /), [सी ++ 03 में डिफ़ॉल्ट-प्रारंभिक और मूल्य-प्रारंभिक के बीच अंतर?] (Http://stackoverflow.com/questions/7084831/)। – outis

उत्तर

19

एक घोषित चर शून्य प्रारंभ, मूल्य प्रारंभ या डिफ़ॉल्ट प्रारंभ हो सकता है।

अपने उदाहरण में:

करने के लिए शून्य से प्रारंभ प्रकार टी की एक वस्तु का अर्थ है::

Info *p = new Info(); <------- Value Initialization 
Info *p = new Info;  <------- Default Initialization 

सी ++ 03 स्टैंडर्ड 8.5/5 जिसे उपयुक्त प्रत्येक को परिभाषित करता है

- यदि टी एक स्केलर प्रकार (3.9) है, तो ऑब्जेक्ट को 0 (शून्य) के मान में सेट किया जाता है जो टी में परिवर्तित हो जाता है;
- यदि टी एक गैर-यूनियन वर्ग प्रकार है, तो प्रत्येक गैर-डेटा डेटा सदस्य और प्रत्येक बेस-स्तरीय सबोबजेक्ट
शून्य-प्रारंभिक है;
- यदि टी एक संघ प्रकार है, तो ऑब्जेक्ट का पहला नाम डेटा सदस्य शून्य-प्रारंभिक है;
- यदि टी एक सरणी प्रकार है, तो प्रत्येक तत्व शून्य-प्रारंभिक है;
- यदि टी एक संदर्भ प्रकार है, तो कोई प्रारंभिकता नहीं की जाती है।

करने के लिए डिफ़ॉल्ट आरंभ कर प्रकार टी की एक वस्तु का अर्थ है:
- अगर टी एक गैर पॉड वर्ग प्रकार (खंड 9) है, टी के लिए डिफ़ॉल्ट निर्माता कहा जाता है (और प्रारंभ बीमार बनाई है अगर टी में कोई सुलभ डिफ़ॉल्ट कन्स्ट्रक्टर नहीं है);
- यदि टी एक सरणी प्रकार है, तो प्रत्येक तत्व डिफ़ॉल्ट-प्रारंभिक है;
- अन्यथा, ऑब्जेक्ट शून्य-प्रारंभिक है।

करने के लिए मूल्य-प्रारंभ प्रकार टी की एक वस्तु का अर्थ है:
- अगर टी एक वर्ग प्रकार (खंड 9) एक उपयोगकर्ता के घोषित निर्माता (12 के साथ है।1), तो टी के लिए डिफ़ॉल्ट कन्स्ट्रक्टर कहा जाता है (और प्रारंभिकता बीमार है यदि टी के पास डिफ़ॉल्ट कन्स्ट्रक्टर नहीं है);
- यदि टी उपयोगकर्ता द्वारा घोषित कन्स्ट्रक्टर के बिना गैर-यूनियन क्लास प्रकार है, तो प्रत्येक गैर-स्थैतिक डेटा सदस्य और टी के बेस-क्लास घटक मूल्य-प्रारंभिक होते हैं;
- यदि टी एक सरणी प्रकार है, तो प्रत्येक तत्व मूल्य-प्रारंभिक है;
- अन्यथा, ऑब्जेक्ट शून्य-प्रारंभिक

+0

अलस - बहुत अच्छा जवाब - मुझे टाइपिंग बचाया! –

+0

मेरे मामले में, कक्षा 'जानकारी' पीओडी कक्षा प्रकार है। क्या इसका मतलब है कि डिफ़ॉल्ट प्रारंभिक शून्य प्रारंभिक होगा? – user1086635

+0

@ उपयोगकर्ता 1086635: हां। यह ऊपर मानक मानक उद्धरण के दूसरे अनुच्छेद में स्पष्ट रूप से उल्लेख किया गया है। –

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