c++ - इंट और फ्लोट का योग क्यों होता है?




type-conversion (2)

C (और C ++) में, 3.14f + 1 float प्रकार के प्रमोशन के कारण float प्रकार है।

लेकिन C में, C90 तक और इसमें शामिल है, और ऐसा मानक संभवतः आपका C कंपाइलर डिफ़ॉल्ट हो सकता है, इसे एक int प्रकार को दिया जाता है, 4 को उपज, क्योंकि ऑटोमैटिक स्टोरेज की अवधि वाले वेरिएबल के लिए int डिफॉल्ट टाइप है। C99 से, संकलन विफल हो जाएगा क्योंकि अंतर्निहित int वापस ले लिया गया था, हालांकि संकलक अभी भी इसे एक चेतावनी के साथ अनुमति दे सकते हैं।

(C ++ 11 और बाद में, auto कंपाइलर को टाइप करने के लिए निर्देश देता है। sum मान 3.14f + 1 साथ एक float होगा। C ++ 98 या C ++ 03 के रूप में 3.14f + 1 अभी भी काम कर सकता है, लेकिन इसके बारे में चेतावनी उत्पन्न करता है। C ++ 11 एक्सटेंशन। उदाहरण के लिए, यह क्लैंग करता है । C ++ 11 में auto का यह फिर से परिभाषित करना C और C ++ के बीच एक अन्य भौतिक विचलन का प्रतिनिधित्व करता है।)

निम्नलिखित कोड पर विचार करें:

float d  = 3.14f;
int   i  = 1;
auto sum = d + i;

cppreference.com अनुसार, जब इसे d जोड़ा जाता है, तो i float परिवर्तित किया जाना चाहिए। हालाँकि, जब मैं वास्तव में कोड चलाता हूं, तो मुझे लगता है कि sum 4 है। ऐसा क्यों होता है?

दिलचस्प है, जब मैंने स्पष्ट रूप से अपने संकलक को C11 मोड में रखा, तो मैंने पाया कि sum 4.14 था। C11 मानक में कौन से नियम बदलते हैं जो परिणाम को प्रभावित करते हैं?

यदि मैं C ++ कंपाइलर का उपयोग करके समान कोड संकलित करता हूं तो क्या होगा?


कुछ संकलक में, .c एक्सटेंशन वाली फाइलें C के रूप में संकलित की जाती हैं, C ++ नहीं।

float d = 3.14f;
int i = 1;
auto sum = d + i;

के रूप में संकलित:

float d = 3.14f;
int i = 1;
int sum = d + i;

सी भाषा में, auto एक स्टोरेज अवधि निर्दिष्ट करने के लिए एक कीवर्ड है। जब आप एक auto वैरिएबल बनाते हैं तो इसकी "स्वचालित भंडारण अवधि" होती है। हम इन वस्तुओं को "स्थानीय चर" कहते हैं। C में, फ़ंक्शन के सभी चर डिफ़ॉल्ट रूप से स्थानीय हैं। यही कारण है कि कीवर्ड auto शायद ही कभी इस्तेमाल किया जाता है।

C भाषा में auto कीवर्ड बेकार है। ऐसा इसलिए है क्योंकि C भाषा से पहले B भाषा मौजूद थी जिसमें स्थानीय चर घोषित करने के लिए वह खोजशब्द आवश्यक था। (बी को एनबी में विकसित किया गया था, जो सी बन गया)








type-conversion