c++ - ऑटो इस चर को दोगुना और फ्लोट के रूप में क्यों नहीं घटाता है?




floating-point literals (3)

C ++ (और C) में, फ्लोटिंग शाब्दिकों को डिफ़ॉल्ट रूप से double माना जाता है जब तक कि f or F or l or L द्वारा निर्दिष्ट नहीं किया f or F or l or L

मानक निम्नलिखित है:

2.14.4 एक अस्थायी शाब्दिक का प्रकार दोहरा है जब तक कि एक प्रत्यय द्वारा स्पष्ट रूप से निर्दिष्ट नहीं किया जाता है। प्रत्यय एफ और एफ निर्दिष्ट फ्लोट, प्रत्यय एल और एल लंबे डबल निर्दिष्ट करते हैं। यदि स्केल किया गया मान अपने प्रकार के लिए प्रतिनिधित्व योग्य मानों की श्रेणी में नहीं है, तो प्रोग्राम बीमार है।

अत,

auto one = 3.5;

हमेशा double और यदि आप float का इरादा रखते हैं तो इसे कोडित किया जाना चाहिए

auto one = 3.5f;

नीचे दिए गए स्निपेट में, auto चर को double , लेकिन मुझे float

auto one = 3.5;

क्या यह हमेशा दशमलव बिंदु के साथ शाब्दिक के लिए double उपयोग करता है? यह फ्लोट और डबल के बीच कैसे तय करता है?


C ++ में फ़्लोटिंग पॉइंट शाब्दिक का प्रकार स्वचालित रूप से double जब तक कि:

  1. f को प्रत्यय दिया जाता है, जिस स्थिति में शाब्दिक का प्रकार float

  2. L प्रत्यय होता है, इस मामले में शाब्दिक का प्रकार long double

इसलिए, यदि आप चाहते हैं कि आपका चर एक float , तो यह करें:

auto one = 3.5f;

3.5 एक double शाब्दिक है। इस प्रकार auto सही ढंग से double रूप में कटौती करता है। आप float वैरिएबल को इनिशियलाइज़ करने के लिए अभी भी इसका इस्तेमाल कर सकते हैं, लेकिन सबसे सही तरीका है कि आप float शाब्दिक का उपयोग करें जैसे 3.5f । अंत में f को प्रत्यय कहा जाता है। फ़्लोटिंग पॉइंट शाब्दिकों के प्रत्यय हैं:

  • (no प्रत्यय) दोहरे को परिभाषित करता है
  • f F फ्लोट को परिभाषित करता है
  • l L लंबे डबल को परिभाषित करता है

फ्लोटिंग पॉइंट शाब्दिक के अलावा, अभिन्न शाब्दिक और उपयोगकर्ता-परिभाषित शाब्दिक के लिए भी प्रत्यय हैं।





type-deduction