C और C ++ अभिव्यक्ति (int) + 4 * 5 की अनुमति क्यों देते हैं?


86
(int) + 4*5;

ऐसा क्यों है (मूल्य के साथ एक प्रकार जोड़ना) संभव है? (जी ++ और जीसीसी के साथ की कोशिश की।)

मुझे पता है कि इसका कोई मतलब नहीं है (और इसका कोई प्रभाव नहीं है), लेकिन मैं जानना चाहता हूं कि यह क्यों संभव है।



45
एक उपयोगी उपकरण है जिसे cppinsightsयह समझने में मदद मिलती है कि कोड कंपाइलर फ्रंटेंड परिप्रेक्ष्य से कैसे दिखता है। इसका एक ऑनलाइन संस्करण भी है, आप देख सकते हैं कि यह आपके उदाहरण के बारे में क्या बताता है (वही '
कोष्ठकीकरण

22
इस बयान के बराबर है +(int)+ 4*5;और -(int)- 4*5;और -+-+-(int)-+-+- 4*5;और कम काव्यात्मक;
chqrlie

16
क्या हिस्सा आप पहेली? सभी के लिए मुझे पता है, आप पूछ रहे हैं कि आपको संकेत दिखाए बिना 5 लिखने की अनुमति क्यों है।
कार्स्टन एस

5
क्या C ++ को आपको यह चेतावनी नहीं देनी चाहिए कि C ++ में C- टाइप कास्ट की अनुशंसा नहीं की जाती है?
मिस्टर लिस्टर

जवाबों:


141

+यहाँ है एकल +ऑपरेटर , नहीं द्विआधारी इसके अलावा ऑपरेटर । यहां कोई जोड़ नहीं है।

इसके अलावा, वाक्य रचना (int) का उपयोग टाइपकास्टिंग के लिए किया जाता है।

आप उस कथन को फिर से पढ़ सकते हैं

(int) (+ 4) * 5;    

जिसे के रूप में पार्स किया जाता है

((int) (+ 4)) * (5);    

जो कहते हैं,

  1. अनार्य लागू करें +पूर्णांक स्थिरांक मान पर ऑपरेटर4
  2. टाइपकास्ट करने के लिए a int
  3. ऑपरेंड के साथ गुणा करें 5

इस के समान है (int) (- 4) * (5); , जहां यूनीरी ऑपरेटर का उपयोग अधिक परिचित है।

आपके मामले में, एकता +और कलाकारों को int- दोनों निरर्थक हैं।


50
"कास्टिंग", "टाइपकास्टिंग" नहीं। टाइपकास्टिंग एक ऐसी चीज है जो अभिनेताओं के साथ होती है।
कीथ थॉम्पसन

8
(+ 4)को ऑपरेंड+4 नहीं बनाया जाता है , इसका मतलब यह है कि ओपेरियन के +लिए एकरी लागू होता है 4, जो वास्तव में ओपी के मामले में एक ऑप है, लेकिन अन्य परिस्थितियों में पूर्णांक पदोन्नति या सरणी क्षय का कारण बन सकता है। उदाहरण के लिए char c = 0; sizeof +c == sizeof cशायद गलत है और sizeof +"a"शायद 2. नहीं है
chqrlie

7
"दोनों बेमानी हैं" - पूरी बात बेमानी है, जैसे 42;:-)
paxdiablo

11
मुझे टाइपिंग कास्टिंग शब्द का उपयोग करने में कोई दिक्कत नहीं है। ऐसा लगता है कि मैं अकेला नहीं हूं
बेन

14
@ बीन टाइपकास्टिंग कास्टिंग नहीं है।
केनेथ के।

40

इसकी व्याख्या इस प्रकार है ((int)(+4)) * 5। यही है, एक अभिव्यक्ति +4(एक अपरिपक्व प्लस ऑपरेटर जो शाब्दिक रूप से लागू होता है 4), intसी-स्टाइल कास्ट के साथ टाइप करने के लिए डाली जाती है, और परिणाम से गुणा किया जाता है 5

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.