https://en.cppreference.com/w/cpp/language/list_initialization< के अनुसार /a>, सूची आरंभीकरण के प्रभावों में से एक है:

यदि T एक समग्र प्रकार है, तो कुल आरंभीकरण किया जाता है।

चूँकि सरणियाँ कुल प्रकार की होती हैं, जब मैं एक सरणी int array[3] = {1, 2}; को इनिशियलाइज़ करता हूँ,

मुझे विश्वास है कि क्या होता है

  1. सूची आरंभीकरण
  2. कुल आरंभीकरण
  3. कॉपी इनिशियलाइज़ेशन जहाँ 1, 2 कॉपी इनिशियलाइज़र लिस्ट के संबंधित क्लॉज़ से इनिशियलाइज़ की जाती है
  4. शेष मान मान आरंभिक हैं (शून्य आरंभीकरण)

यह मुझे समझ में आता है क्योंकि सरणी के मान {1, 2, 0} होंगे।

हालाँकि, जैसा कि मैंने पढ़ना जारी रखा, मैंने सूची आरंभीकरण का एक और प्रभाव देखा जो था:

यदि टी एक समग्र प्रकार है और प्रारंभकर्ता सूची में समान या व्युत्पन्न प्रकार (संभवतः सीवी-योग्य) का एक तत्व है, तो ऑब्जेक्ट को उस तत्व से प्रारंभ किया जाता है (प्रति-सूची-प्रारंभिकरण के लिए प्रतिलिपि-प्रारंभिक द्वारा, या प्रत्यक्ष- प्रत्यक्ष-सूची-आरंभीकरण के लिए आरंभीकरण)।

तो एक सरणी int array[3] = {1}; घोषित करेगा जहां "प्रारंभकर्ता सूची में एक तत्व है" एक से अधिक तत्व होने की तुलना में एक अलग प्रक्रिया होगी? (यानी int array [3] = {1, 2};)? यह मुझे समझ में नहीं आता है, लेकिन मुझे यकीन नहीं है कि मैं क्या खो रहा हूं।

1
csguy 8 अगस्त 2019, 04:44

1 उत्तर

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

वह प्रभाव लागू नहीं होगा, जैसा कि उद्धरणों में कहा गया है,

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

दिया गया int array[3] = {1};, {1} में int प्रकार का एक ही तत्व 1 है, जो समान या व्युत्पन्न प्रकार का सरणी प्रकार int[3] नहीं है।

3
songyuanyao 8 अगस्त 2019, 05:05