रूपांतरण है जब एक मूल्य है स्टेटिक कास्टिंग भी आप ठेठ "निहित" प्रकार रूपांतरण होता है कि जब आप की तरह कुछ करने की अनुमति देता , उम, एक अलग प्रकार में परिवर्तित। नतीजा लक्ष्य प्रकार का एक मूल्य है, और आउटपुट मूल्य के परिणाम के लिए नियम हैं जो स्रोत (स्रोत प्रकार के) से हैं।
उदाहरण के लिए:
int i = 3;
unsigned int j;
j = i; // the value of "i" is converted to "unsigned int".
परिणाम unsigned int
मूल्य कि i
सापेक्ष UINT_MAX+1
समान हो जाता है, और इस नियम भाषा का हिस्सा है। इसलिए, इस मामले में मान (अंग्रेजी में) अभी भी "3" है, लेकिन यह 3 का एक हस्ताक्षरित int मान है, जो 3.
पर हस्ताक्षर किए गए अंतर से अलग है, ध्यान दें कि रूपांतरण स्वचालित रूप से हुआ, हम बस एक ऐसी स्थिति में एक हस्ताक्षरित int मान का उपयोग किया जहां एक हस्ताक्षरित int मान आवश्यक है, और भाषा परिभाषित करती है कि इसका अर्थ यह है कि वास्तव में यह कहकर कि हम परिवर्तित हो रहे हैं। इसे "निहित रूपांतरण" कहा जाता है।
"कास्टिंग" एक स्पष्ट रूपांतरण है।
उदाहरण के लिए:
unsigned int k = (unsigned int)i;
long l = long(i);
unsigned int m = static_cast<unsigned int>(i);
सभी डाले हैं। विशेष रूप से, मानक के 5.4/2 के अनुसार, k
कास्ट-अभिव्यक्ति का उपयोग करता है, और 5.2.3/1, l
के अनुसार समतुल्य चीज़ का उपयोग करता है (सिवाय इसके कि मैंने एक अलग प्रकार का उपयोग किया है)। m
एक "प्रकार रूपांतरण ऑपरेटर" (static_cast
) का उपयोग करता है, लेकिन मानक के अन्य हिस्सों को उनको "कास्ट" भी कहा जाता है।
उपयोगकर्ता-परिभाषित प्रकार "रूपांतरण कार्यों" जो अन्य प्रकार के अपने प्रकार परिवर्तित करने के लिए विशिष्ट नियम प्रदान परिभाषित कर सकते हैं, और एकल आर्ग कंस्ट्रक्टर्स रूपांतरण में भी उपयोग किया जाता है:
struct Foo {
int a;
Foo(int b) : a(b) {} // single-arg constructor
Foo(int b, int c) : a(b+c) {} // two-arg constructor
operator float() { return float(a); } // conversion function
};
Foo f(3,4); // two-arg constructor
f = static_cast<Foo>(4); // conversion: single-arg constructor is called
float g = f; // conversion: conversion function is called
+1, लेकिन यह ध्यान दिया जाना चाहिए कि इस शब्दावली का सख्ती से पालन नहीं किया जाता है। 'Int i पर विचार करें; फ्लोट एफ = static_cast (i) '- आपके तर्क से (और मैं सहमत हूं), यह एक * रूपांतरण * है, न कि कलाकार। सी ++ अभी भी 'static_cast' का उपयोग करता है (और हाँ, मुझे पता है कि एक निहित रूपांतरण यहां काम करेगा)। दूसरे शब्दों में: आपने दो शर्तों के अर्थपूर्ण रूप से सबसे सार्थक भेद दिया है। लेकिन सी ++ इस भेद का पालन नहीं करता है। –
कुछ चीजों को स्पष्ट करने के लिए संपादित, उम्मीद है कि मैं गलत जानकारी फैल रहा हूं। –
ऐसा लगता है कि एक * कास्ट-एक्सप्रेशन * (5.4/2) एक कलाकार नहीं है, बल्कि एक रूपांतरण है। यह सामान्य रूप से प्रोग्रामिंग भाषाओं के लिए "कास्ट" बनाम "रूपांतरण" की एक उपयोगी परिभाषा हो सकती है, लेकिन यह सी ++ मानक में उपयोग की जाने वाली "कास्ट" की परिभाषा नहीं है। –