2011-01-23 10 views
11

संभावित डुप्लिकेट:
C++ cast syntax styles
C++: What's the difference between function(myVar) and (function)myVar ?
What is the difference between (type)value and type(value) ?सी-जैसे कास्टिंग और कार्यात्मक कास्टिंग के बीच क्या अंतर है?

b = (int) a; // c-like cast notation 
b = int (a); // functional notation
+2

यह भी देखें: http://stackoverflow.com/questions/32168/c-cast-syntax-styles –

उत्तर

2

वहाँ कोई अंतर नहीं है। यह वरीयता का मामला है। ये पुरानी शैली हैं

+5

-1 यह झूठी जानकारी है। – Omnifarious

+0

@ चार्ल्स बेली - मैंने गलती की। इसे ठीक करने में बहुत देर हो चुकी है। मुझे खेद है @ user384706। – Omnifarious

3

शायद कोई अंतर नहीं है। आधिकारिक तौर पर, पहले संकलक को बताता है कि मान एक पूर्णांक है। यह शायद कोई अतिरिक्त कोड उत्पन्न नहीं करता है। फ़ंक्शन कॉल एक वास्तविक कॉल है जो आंतरिक रूप से अन्य टाइपकास्ट करता है। एक स्मार्ट कंपाइलर इसे अनुकूलित करेगा, इसलिए वे वास्तव में वही हैं।

5

स्पष्ट रूप से मैं एक उत्तर में अपने शुरुआती कट में गलत था। वे लगभग बराबर हैं। और जबकि long long या void * जैसे यौगिक प्रकार के नाम सीधे कार्यात्मक वाक्यविन्यास का उपयोग नहीं कर सकते हैं (यानी long long(val) काम नहीं करता है), typedef का उपयोग इस समस्या के आसपास हो सकता है।

दोनों कास्ट नोटेशन बहुत खराब हैं और इन्हें टालना चाहिए। उदाहरण के लिए:

const char c = 'a'; 
void *fred = (void *)(&c); 

काम करता है, और यह नहीं होना चाहिए।

दोनों सी शैली डाली अंकन कभी कभी static_cast तरह const_cast की तरह कभी कभी reinterpret_cast तरह सटीक स्थिति है जिसमें यह प्रयोग किया जाता है के आधार पर दो की भी एक संयोजन व्यवहार करेंगे, कभी कभी,, या। ये अर्थशास्त्र जटिल हैं और किसी भी स्थिति में क्या हो रहा है यह बताना हमेशा आसान नहीं होता है।

मैं ज्यादातर सी ++ static_cast<type>(val) शैली कास्ट का उपयोग करने के लिए चला गया हूं, और कभी भी सी-स्टाइल कास्ट का उपयोग नहीं करता हूं। इस प्रश्न के लिए मेरे शोध के आधार पर मैं कुछ भी के लिए फ़ंक्शन-शैली का उपयोग करने से रोकना चाहता हूं। प्रश्न "C++ cast syntax styles" का एक उत्कृष्ट उत्तर (स्वीकार्य एक) है जो विवरण क्यों देता है।

+2

यह पूरी तरह से झूठा है। 'कक्षा ए {ऑपरेटर int() कॉन्स; }; इंट टेस्ट (ए ए) {वापसी int (ए); } 'int' का कोई कंस्ट्रक्टर नहीं है, भले ही पूरी तरह से काम करता है। एक पैरामीटर शैली के साथ एक फ़ंक्शन शैली कास्ट बराबर सी-स्टाइल कास्ट के समान प्रभाव होता है। –

+0

@ चार्ल्स बेली - मैंने और पढ़ा और पाया कि मैं गलत था। :-) मैंने अपना जवाब तय कर दिया। – Omnifarious

+0

पॉइंटर्स के साथ कार्यात्मक शैली कास्ट: 'typedef शून्य * voidp; voidp fred = voidp (&c); ' –

1

यह इस बात पर निर्भर करता है कि आप इसका उपयोग कहां करते हैं और कैसे। यदि आपके पास मूल्य या पॉइंटर्स हैं (या पॉइंटर्स के पॉइंटर्स)।

सी ++ के साथ आपको * _cast <> पर पढ़ना चाहिए और इसके बजाय उनका उपयोग करना चाहिए।

संबंधित मुद्दे