2017-12-20 32 views
6

मैं शून्य करने के लिए सरणी के सभी सदस्यों को आरंभ करना चाहते हैं, या nullptrक्या सी ++ में सी सरणी शुरू करने के इन तरीकों के बीच कोई अंतर है?

struct Window{ int a;}; 


int main() 
{ 
    Window* list[4] = { 0, 0, 0, 0 }; 
    Window* list2[4] = {0}; 
    Window* list3[4] = {}; 
    Window* list4[4]{ 0, 0, 0, 0 }; 
    Window* list5[4]{0}; 
    Window* list6[4]{}; 
} 

मैं समझता हूँ कि जब किसी भी मूल्य के लिए कम से कम एक सदस्य initialising अन्य सभी शून्य, initialised इसलिए यदि मैं ऐसा कर रहे हैं:

int list[4] = { 6 }; 

पहला सदस्य 6 बन जाता है और बाकी सभी शून्य-प्रारंभिक होते हैं। मैं कर रहा हूँ उलझन लेकिन साथ:

int list[4]{0}; 

और

int list[4]{}; 

मुझे लगता है कि खाली तरंगित कोष्ठकों सही होने के बाद एक के बिना घोषणा बराबर के चिह्न क्या शून्य initialisation कहा जाता है कर रहे हैं, के रूप में initialisation डिफ़ॉल्ट करने का विरोध किया है, लेकिन तो int list[4]{0} है, है ना? क्या इसमें दृश्यों के पीछे std::initializer_list शामिल है या नहीं? मैंने सोचा कि इन्हें केवल गैर-पीओडी प्रकारों के लिए उपयोग किया जाता था, इसलिए std::initializer_list का उपयोग यहां नहीं किया जा रहा है?

+1

वे [कुल प्रारंभिकरण] के सभी अलग-अलग रूप हैं (http://en.cppreference.com/w/cpp/language/aggregate_initialization), और एक ही अंतिम प्रभाव है। – Praetorian

+2

मुझे [इस साइट] से प्यार है (http://en.cppreference.com/w/cpp/language/value_initialization) यह [प्रारंभकर्ता] के बारे में सबकुछ बताता है (http://en.cppreference.com/w/cpp/ भाषा/list_initialization)। – lakeweb

+0

@lakeweb धन्यवाद।ओह प्रिय, यह सी ++ 03 और सी ++ 11 के बीच अलग है, ये कुछ बहुत सूक्ष्म चीजें हैं। – Zebrafish

उत्तर

3

वहाँ सी ++ में एक सी सरणी initialising के इन तरीकों के बीच एक अंतर है?

नहीं। वे अर्थात् समकक्ष हैं।

शून्य प्रारंभिकरण, डिफ़ॉल्ट प्रारंभिकरण के विपरीत, लेकिन यह भी int सूची [4] {0} है, है ना?

पहला तत्व शून्य के साथ प्रतिलिपि बनाई गई है। शेष तत्व मूल्य प्रारंभिक हैं, जो int के लिए वास्तव में शून्य प्रारंभिकता है। मूल्य, शून्य और शून्य के साथ प्रारंभिक प्रतिलिपि में विशेष रूप से int के मामले में कोई प्रभाव नहीं है। भेद उस मामले में वाक्य रचनात्मक है।

क्या इसमें दृश्यों के पीछे एक std :: startizer_list शामिल है या नहीं?

std::initializer_list शामिल नहीं है।

0

सी ++ में सरणी स्टोर करने के लिए सूचक का उपयोग न करें, यह भी सी स्टाइल बजाय :)

उपयोग कंटेनर है। सामान्य उद्देश्यों के लिए ऑब्जेक्ट की सरणी बनाने के लिए मैं हमेशा vector पर चिपक जाता हूं। वेक्टर की शुरुआत क्लास कन्स्ट्रक्टर का पालन करेगी। मुझे अपनी Window कक्षा को थोड़ा सा संशोधित करने दें।

struct Window { 
    // Class constructor 
    Window(const int _a_) { 
     a = _a_; 
    } 

    // Class member 
    int a; 
}; 

std::vector<Window> windows (4, Window(0)); 

आपका खिड़कियों a के शून्य प्रारंभ मूल्य के साथ 4 Window शामिल होंगे। उम्मीद है कि यह आपके प्रश्न का उत्तर दें।

+0

मुझे पूरा यकीन है कि ओपी कंटेनरों से अच्छी तरह से अवगत है। उनका प्रश्न विशिष्ट भाषा संरचनाओं के बीच मतभेदों के बारे में है। – dasblinkenlight

+0

ओह यह मेरा बुरा है। मैं बस इसे पढ़कर निष्कर्ष पर पहुंचा 'मैं सरणी के सभी सदस्यों को शून्य में शुरू करना चाहता हूं'। –

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