c++ - why didn't the positive terms get displayed in this asbolute program -
इस डेमो के साथ शुरू करें
#include & lt; iostream & gt; नेमस्पेस एसटीडी का उपयोग करना; टेम्पलेट & lt; कक्षा T & gt; शून्य एबीटी (टी नंबर) {यदि (नंबर और लेफ्टिनेंट; 0) संख्या = -म्बर; Cout & lt; & lt; "संख्या का पूर्ण मूल्य है" & lt; & lt; संख्या & lt; & lt; endl; वापसी; } Int main () {int num1 = 1; इंट संख्या 2 = 2; डबल संख्या 3 = -2.1333; Float num4 = -4.23f; पेट (संख्या 1); पेट (NUM2); पेट (num3); पेट (num4); वापसी 0; }
आउटपुट केवल अपने संपूर्ण मूल्य फॉर्म में num3 और num4 दिखाए। Num1 और 2 प्रदर्शित नहीं किए गए थे
लेकिन क्या कार्यक्रम ऊपर से नीचे तक नहीं पढ़ता है? मैंने सोचा कि अगर num1 0 से बड़ा है, तो यह सभी तरीकों से, cout स्टेटमेंट में जाना चाहिए, और अर्थात प्रिंट 1।
ऐसा लगता है कि इस टेम्पलेट फ़ंक्शन उन लोगों के लिए छोड़ रहे हैं जो नकारात्मक नहीं हैं
धन्यवाद
मानक लाइब्रेरी में एक अंतर्निहित है:
int abs (int n); लंबे पेट (लंबी एन);
गैर templated फ़ंक्शंस templated फ़ंक्शंस की तुलना में अधिक विशिष्ट हैं, इसलिए संकलक आपके templated फ़ंक्शन के लिए वरीयता में इन संस्करणों का उपयोग करने जा रहा है, और इस प्रकार फ़ंक्शन ओवरलोड रिज़ॉल्यूशन में पूर्वता लेता है।
मैं सुझाव देता हूं कि आप अपने एक साइड नोट के रूप में, यह शायद संदिग्ध व्यवहार हो सकता है आपके मानक पुस्तकालय कार्यान्वयन का हिस्सा ऐसा प्रतीत होता है कि मैं एक समाधान के रूप में, बस एक जिज्ञासा की सिफारिश नहीं करता। एब फ़ंक्शन का नाम बदलें और इसे ठीक करने के लिए कुछ और।
#include & lt; iostream & gt;
एक गैर- std
-namespaced declaration abs
में खींच रहा है और संभवत: यह नहीं करना चाहिए उस। अगर आप सी-स्टाइल प्रिंटफिक्स पर स्विच करते हैं तो आपका प्रोग्राम कुछ भी नाम बदलने के बिना ठीक काम करता है (कम से कम मेरे प्लेटफ़ॉर्म पर) टेम्पलेट & lt; कक्षा T & gt; शून्य एबीटी (टी नंबर) {यदि (नंबर और लेफ्टिनेंट; 0) संख्या = -म्बर; Printf ("संख्या का पूर्ण मूल्य% g \ n", (डबल) संख्या है); वापसी; } Int main () {int num1 = 1; इंट संख्या 2 = 2; डबल संख्या 3 = -2.1333; Float num4 = -4.23f; पेट (संख्या 1); पेट (NUM2); पेट (num3); पेट (num4); वापसी 0; }
Comments
Post a Comment