C++ में a = 5, a(5), a{5} और a[5] के कथनों में क्या अंतर है?

मैं कभी-कभी उन्हें सी ++ प्रोग्राम में किसी ऑब्जेक्ट को मान निर्दिष्ट करने जैसे किसी भी चीज़ के लिए उपयोग करता हूं। उनमें अंतर कहां है?

1
RobertS supports Monica Cellio 16 जिंदा 2020, 14:10

1 उत्तर

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

इन सभी कथनों के बीच इनिशियलाइज़ेशन (जो किसी ऑब्जेक्ट की घोषणा के क्षण में किया जाता है) और असाइनमेंट के संदर्भ में एक मुख्य अंतर है; अंतिम कथन a[5] भी दूसरों की तुलना में पूरी तरह से अलग बात है।


परिसर: यदि a एक निश्चित डेटाटाइप का ऑब्जेक्ट है, उदाहरण के लिए int, तो हम a को एक उपयुक्त मान (घोषित डेटाटाइप के अनुसार) असाइन कर सकते हैं। नोट: मान का मूल्यांकन एक मान्य व्यंजक द्वारा किया जा सकता है, उदाहरण के लिए a = 2 + 3; a = 5; के समान व्यवहार करता है।


  1. a = 5;

यह C++ प्रोग्राम में उपयोग किया जाने वाला सामान्य असाइनमेंट फॉर्म है। इसका उपयोग या तो आरंभीकरण या बाद के असाइनमेंट (a की घोषणा के बाद) के लिए संबंधित दायरे में किया जा सकता है। यदि a को int प्रकार के रूप में ठीक से घोषित किया गया है, तो यह कथन 5 के पूर्णांक मान को a के int चर के लिए निर्दिष्ट करता है।

इसका उपयोग या तो सीधे घोषणा द्वारा किया जा सकता है:

int a = 5;

पहला असाइनमेंट (जब a इसकी घोषणा पर प्रारंभ नहीं किया गया है):

int a;
// some code may exist between.
a = 5;

या घोषणा पर पहले असाइनमेंट या इनिशियलाइज़ेशन के बाद संबंधित दायरे में कहीं और एक असाइनमेंट (भंडारण वर्ग पर निर्भर):

int a;          // declaration of `a`.
// some code may exist between.
a = 5;          // first assignment of `a` with the value of `5`.
// some code may exist between.
a = 7;          // assignment of the value of `7` to `a`.

  1. a(5);

यह कथन a के int चर को 5 के मान से आरंभ करता है। इसका उपयोग केवल घोषणा के समय स्पष्ट आरंभीकरण पर किया जा सकता है:

int a(5);

अन्यथा संकलक उच्च-शायद एक त्रुटि फेंक देगा, क्योंकि यह "सोचता है" कि a एक फ़ंक्शन होगा।

तकनीकी रूप से, a(5) एक फ़ंक्शन हो सकता है, जो सामान्य रूप से तर्क के रूप में 5 का मान लेता है, लेकिन यह एक int ऑब्जेक्ट की घोषणा का संदर्भ है जो यहां अंतर बनाता है।


  1. a{5};

2 के समान। यह a को 5 के मान से प्रारंभ करता है। घोषणा के समय इनिशियलाइज़ेशन द्वारा इसका उपयोग केवल किया जा सकता है:

int a{5};

अन्यथा संकलक एक त्रुटि फेंक देगा।


नोट: int a{5}; या int a(5) जैसे मान को इनिशियलाइज़ करना केवल C++ फीचर है। इस तरह से C में किसी ऑब्जेक्ट को इनिशियलाइज़ करना संभव नहीं है।


  1. a[5];

इस कथन के साथ हम स्पष्ट रूप से 5 के मान को a के वेरिएबल में इनिशियलाइज़ या असाइन नहीं करते हैं। इसके बजाय, हम एक सरणी को परिभाषित करते हैं, वस्तुओं का एक समूह, जिसमें 5 ऑब्जेक्ट शामिल होते हैं, जिसे a के पहचानकर्ता द्वारा अपनी इकाई के रूप में दर्शाया जाता है:

int a[5]; // declaration of `a` - `a` is an array of 5 int objects.

इसलिए, हमारे यहां एक भी वस्तु नहीं है और न ही इसके लिए कोई मूल्य निर्दिष्ट किया जा रहा है।

इसके अलावा, हमें एक सरणी की घोषणा के बीच अंतर करना होगा:

int a[5];

और बाद में सरणी के एक निश्चित int ऑब्जेक्ट तक पहुंच a, उदाहरण के लिए:

a[4] = 12;

इस मामले में, a[4], सरणी के अंदर 5वें ऑब्जेक्ट का प्रतिनिधित्व कर रहा है और 12 का मान सरणी के उस पांचवें ऑब्जेक्ट को असाइन किया गया है।

वर्ग कोष्ठक के अंदर की संख्या, यहाँ 4, सूचकांक संख्या कहलाती है। ध्यान दें, कि सूचकांक संख्या क्रमिक रूप से 0 से शुरू होती है। इस प्रकार, a[0] सरणी में पहली वस्तु का प्रतिनिधित्व करता है, a[1] दूसरा, और इसी तरह। आप उस तरह से a[5] का उपयोग नहीं कर सकते, यदि आपने a को int a[5]; के साथ घोषित किया है, क्योंकि यह इस मामले में, एक छठी वस्तु का प्रतिनिधित्व करेगा, जिसे a a.

4
Taron 16 जिंदा 2020, 11:42