(int) + 4*5;
ऐसा क्यों है (मूल्य के साथ एक प्रकार जोड़ना) संभव है? (जी ++ और जीसीसी के साथ की कोशिश की।)
मुझे पता है कि इसका कोई मतलब नहीं है (और इसका कोई प्रभाव नहीं है), लेकिन मैं जानना चाहता हूं कि यह क्यों संभव है।
(int) + 4*5;
ऐसा क्यों है (मूल्य के साथ एक प्रकार जोड़ना) संभव है? (जी ++ और जीसीसी के साथ की कोशिश की।)
मुझे पता है कि इसका कोई मतलब नहीं है (और इसका कोई प्रभाव नहीं है), लेकिन मैं जानना चाहता हूं कि यह क्यों संभव है।
cppinsights
यह समझने में मदद मिलती है कि कोड कंपाइलर फ्रंटेंड परिप्रेक्ष्य से कैसे दिखता है। इसका एक ऑनलाइन संस्करण भी है, आप देख सकते हैं कि यह आपके उदाहरण के बारे में क्या बताता है (वही '
+(int)+ 4*5;
और -(int)- 4*5;
और -+-+-(int)-+-+- 4*5;
और कम काव्यात्मक;
जवाबों:
+
यहाँ है एकल +
ऑपरेटर , नहीं द्विआधारी इसके अलावा ऑपरेटर । यहां कोई जोड़ नहीं है।
इसके अलावा, वाक्य रचना (int)
का उपयोग टाइपकास्टिंग के लिए किया जाता है।
आप उस कथन को फिर से पढ़ सकते हैं
(int) (+ 4) * 5;
जिसे के रूप में पार्स किया जाता है
((int) (+ 4)) * (5);
जो कहते हैं,
+
पूर्णांक स्थिरांक मान पर ऑपरेटर4
।int
5
इस के समान है (int) (- 4) * (5);
, जहां यूनीरी ऑपरेटर का उपयोग अधिक परिचित है।
आपके मामले में, एकता +
और कलाकारों को int
- दोनों निरर्थक हैं।
(+ 4)
को ऑपरेंड+4
नहीं बनाया जाता है , इसका मतलब यह है कि ओपेरियन के +
लिए एकरी लागू होता है 4
, जो वास्तव में ओपी के मामले में एक ऑप है, लेकिन अन्य परिस्थितियों में पूर्णांक पदोन्नति या सरणी क्षय का कारण बन सकता है। उदाहरण के लिए char c = 0; sizeof +c == sizeof c
शायद गलत है और sizeof +"a"
शायद 2. नहीं है
42;
:-)
इसकी व्याख्या इस प्रकार है ((int)(+4)) * 5
। यही है, एक अभिव्यक्ति +4
(एक अपरिपक्व प्लस ऑपरेटर जो शाब्दिक रूप से लागू होता है 4
), int
सी-स्टाइल कास्ट के साथ टाइप करने के लिए डाली जाती है, और परिणाम से गुणा किया जाता है 5
।
(int)-4*5