इस कोड को मान लें:

#include <iostream>

struct test {
 int a[3];
 float b[2];
};

मैं इन दोनों तरीकों से सरणी में प्रवेश कर सकता हूं:

int main(){
 test t = {{1,2,3}, {1.0,2.0}};
 return 0;
}

या

int main(){
 test t = {1, 2, 3, 1.0, 2.0};
 return 0;
}

दूसरा दृष्टिकोण भी संकलन कैसे कर रहा है? संकलक प्रत्येक मान उठा रहा है और क्रम में एक सरणी स्लॉट डाल रहा है?

c++
2
Dan 21 अक्टूबर 2020, 00:36

1 उत्तर

सबसे बढ़िया उत्तर

दूसरा स्निपेट एग्रीगेट इनिशियलाइज़ेशन में बताए अनुसार पूरी तरह से मान्य है:

नेस्टेड इनिशियलाइज़र सूचियों के आस-पास के ब्रेसिज़ को हटा दिया जा सकता है (छोड़े गए), इस मामले में जितने आवश्यक हो उतने इनिशियलाइज़र क्लॉज़ का उपयोग प्रत्येक सदस्य या संबंधित सबएग्रीगेट के तत्व को इनिशियलाइज़ करने के लिए किया जाता है, और बाद के इनिशियलाइज़र क्लॉज़ का उपयोग निम्नलिखित सदस्यों को इनिशियलाइज़ करने के लिए किया जाता है। वस्तु ...

चूंकि test एक समुच्चय है, जो उपसमूहों a और b से बना है, नेस्टेड ब्रेसिज़ को छोड़कर पहले 3 तत्वों का उपयोग a को प्रारंभ करने के लिए किया जाता है, और शेष 2 तत्व b को इनिशियलाइज़ करने के लिए इस्तेमाल किया जा रहा है।

5
cigien 21 अक्टूबर 2020, 00:42