Type conversion
کمپیوٹر سائنس میں، ٹائپ کنورژن، ٹائپ کاسٹنگ، ٹائپ جبر، اور ٹائپ جادوگری ایک اظہار کو ایک ڈیٹا ٹائپ سے دوسرے میں تبدیل کرنے کے مختلف طریقے ہیں۔ ایک مثال ایک انٹیجر ویلیو کو فلوٹنگ پوائنٹ ویلیو میں تبدیل کرنا یا اس کی متن کی نمائندگی بطور سٹرنگ، اور اس کے برعکس ہوگی۔ ٹائپ تبدیلیاں ٹائپ کی درجہ بندی یا ڈیٹا کی نمائندگی کی کچھ خصوصیات سے فائدہ اٹھا سکتی ہیں۔ کسی قسم کی تبدیلی کے دو اہم پہلو یہ ہیں کہ آیا یہ مضمر طور پر (خود بخود) یا واضح طور پر ہوتا ہے، اور کیا بنیادی ڈیٹا کی نمائندگی کو ایک نمائندگی سے دوسری میں تبدیل کیا جاتا ہے، یا دی گئی نمائندگی کو محض دوسرے ڈیٹا کی قسم کی نمائندگی کے طور پر دوبارہ تعبیر کیا جاتا ہے۔ عام طور پر، ابتدائی اور مرکب ڈیٹا کی اقسام دونوں کو تبدیل کیا جا سکتا ہے۔ ہر پروگرامنگ زبان کے اپنے قوانین ہوتے ہیں کہ اقسام کو کس طرح تبدیل کیا جا سکتا ہے۔ مضبوط ٹائپنگ والی زبانیں عام طور پر بہت کم مضمر تبدیلی کرتی ہیں اور نمائندگی کی دوبارہ تشریح کی حوصلہ شکنی کرتی ہیں، جبکہ کمزور ٹائپنگ والی زبانیں ڈیٹا کی اقسام کے درمیان بہت سے مضمر تبدیلی انجام دیتی ہیں۔ کمزور ٹائپنگ زبان اکثر مرتب کرنے والے کو ڈیٹا آئٹم کی من مانی تشریح کرنے پر مجبور کرنے کی اجازت دیتی ہے جس میں مختلف نمائشیں ہوتی ہیں-یہ ایک غیر واضح پروگرامنگ کی غلطی، یا بنیادی ہارڈ ویئر سے براہ راست نمٹنے کا تکنیکی طریقہ ہو سکتا ہے۔ زیادہ تر زبانوں میں، لفظ جبر ایک مضمر تبدیلی کی نشاندہی کرنے کے لیے استعمال ہوتا ہے، یا تو تالیف کے دوران یا رن ٹائم کے دوران۔ مثال کے طور پر، ایکسپریشن مکسنگ انٹیجر اور فلوٹنگ پوائنٹ نمبروں (جیسے 5 + 0.1) میں، مرتب خود بخود انٹیجر کی نمائندگی کو فلوٹنگ پوائنٹ کی نمائندگی میں تبدیل کر دے گا تاکہ فریکشن ضائع نہ ہوں۔ واضح قسم کے تبادلوں کو یا تو اضافی کوڈ لکھ کر ظاہر کیا جاتا ہے (مثال کے طور پر۔ ٹائپ شناخت کاروں کو شامل کرنا یا بلٹ ان معمولات کو کال کرنا) یا مرتب کرنے والے کے استعمال کے لیے تبادلوں کے معمولات کو کوڈنگ کرکے جب یہ دوسری صورت میں ٹائپ کے مماثلت کے ساتھ رک جائے گا۔ زیادہ تر ALGOL جیسی زبانوں میں، جیسے پاسکل، موڈولا-2، اڈا اور ڈیلفی، تبدیلی اور کاسٹنگ واضح طور پر مختلف تصورات ہیں۔ ان زبانوں میں، تبادلوں سے مراد یا تو مبہم طور پر یا واضح طور پر کسی قدر کو ایک ڈیٹا ٹائپ اسٹوریج فارمیٹ سے دوسرے میں تبدیل کرنا ہے، جیسے۔ 32 بٹ انٹیجر کے لیے 16 بٹ انٹیجر۔ اسٹوریج کی ضروریات تبدیلی کے نتیجے میں تبدیل ہو سکتی ہیں، بشمول درستگی یا کٹوتی کا ممکنہ نقصان۔ دوسری طرف لفظ کاسٹ سے مراد بٹ پیٹرن کی تشریح کو واضح طور پر تبدیل کرنا ہے جو ایک قسم سے دوسری قسم میں قدر کی نمائندگی کرتا ہے۔ مثال کے طور پر، 32 ملحقہ بٹس کو 32 بولیوں کی صف، ایک 4 بائٹ سٹرنگ، ایک غیر دستخط شدہ 32 بٹ انٹیجر یا ایک آئی ای ای ای سنگل صحت سے متعلق فلوٹنگ پوائنٹ ویلیو کے طور پر سمجھا جا سکتا ہے۔ چونکہ ذخیرہ شدہ بٹس کبھی تبدیل نہیں ہوتے ہیں، اس لیے پروگرامر کو بامعنی طور پر کاسٹ کرنے کے لیے نچلی سطح کی تفصیلات جیسے نمائندگی کی شکل، بائٹ آرڈر، اور صف بندی کی ضروریات کو جاننا چاہیے۔ زبانوں کے سی خاندان اور ALGOL 68 میں، لفظ کاسٹ عام طور پر ایک واضح قسم کی تبدیلی (ایک مضمر تبدیلی کے برخلاف) کی طرف اشارہ کرتا ہے، جس سے اس بارے میں کچھ ابہام پیدا ہوتا ہے کہ آیا یہ بٹ پیٹرن کی دوبارہ تشریح ہے یا ڈیٹا کی نمائندگی کی حقیقی تبدیلی۔ زیادہ اہم طریقوں اور اصولوں کی کثرت ہے جو اس بات پر لاگو ہوتے ہیں کہ پوائنٹر کے ذریعہ کس ڈیٹا ٹائپ (یا کلاس) واقع ہے اور آبجیکٹ (کلاس) وراثت جیسے معاملات میں مرتب کرنے والے کے ذریعہ پوائنٹر کو کس طرح ایڈجسٹ کیا جاسکتا ہے۔ مختلف زبانوں میں واضح کاسٹنگ اڈا اڈا ایک عام لائبریری فنکشن ان چیکڈ _ کنورژن فراہم کرتا ہے۔ سی جیسی زبانیں امپلیسیٹ ٹائپ کنورژن امپلیسیٹ ٹائپ کنورژن، جسے جبر یا ٹائپ جادوگروں کے نام سے بھی جانا جاتا ہے، مرتب کرنے والے کی طرف سے ایک خودکار قسم کی تبدیلی ہے۔ کچھ پروگرامنگ زبانیں مرتب کرنے والوں کو جبر فراہم کرنے کی اجازت دیتی ہیں ؛ دوسروں کو اس کی ضرورت ہوتی ہے۔ مخلوط قسم کے اظہار میں، ایک یا زیادہ ذیلی اقسام کے ڈیٹا کو رن ٹائم پر ضرورت کے مطابق سپر ٹائپ میں تبدیل کیا جا سکتا ہے تاکہ پروگرام صحیح طریقے سے چلے۔ مثال کے طور پر، درج ذیل قانونی سی زبان کا کوڈ ہے: ڈبل ڈی ؛ لانگ ایل ؛ انٹی آئی ؛ اگر (ڈی> آئی) ڈی = آئی ؛ اگر (آئی> ایل) ایل = آئی ؛ اگر (ڈی = = ایل) ڈی * = 2 ؛ اگرچہ، اور مختلف ڈیٹا ٹائپ سے تعلق رکھتے ہیں، وہ ہر بار موازنہ یا اسائنمنٹ پر عمل درآمد کے وقت خود بخود مساوی ڈیٹا ٹائپ میں تبدیل ہو جائیں گے۔ اس رویے کو احتیاط کے ساتھ استعمال کیا جانا چاہیے، کیونکہ غیر ارادی نتائج پیدا ہو سکتے ہیں۔ نمائندگی کو فلوٹنگ پوائنٹ سے انٹیجر میں تبدیل کرتے وقت ڈیٹا ضائع ہو سکتا ہے، کیونکہ فلوٹنگ پوائنٹ ویلیوز کے فریکشنل اجزاء کو کاٹ دیا جائے گا (صفر کی طرف گول)۔ اس کے برعکس، نمائندگی کو انٹیجر سے فلوٹنگ پوائنٹ میں تبدیل کرتے وقت درستگی ختم ہو سکتی ہے، کیونکہ فلوٹنگ پوائنٹ کی قسم کسی انٹیجر کی قسم کی تمام ممکنہ اقدار کی بالکل نمائندگی کرنے سے قاصر ہو سکتی ہے۔ مثال کے طور پر، ایک IEEE 754 واحد صحت سے متعلق قسم ہو سکتی ہے، جو کہ عدد 16777217 کی بالکل نمائندگی نہیں کر سکتی، جبکہ 32 بٹ عدد کی قسم کر سکتی ہے۔ یہ غیر بدیہی رویے کا باعث بن سکتا ہے، جیسا کہ مندرجہ ذیل کوڈ سے ظاہر ہوتا ہے: #include <stdio.h> int مین (کالعدم) {int i _ ویلیو = 16777217 ؛ فلوٹ f _ ویلیو = 16777216.0 ؛ پرنٹ ایف ("انٹیجر ہے:% d\n"، i _ ویلیو) ؛ پرنٹ ایف ("فلوٹ ہے:% f\n"، f _ ویلیو) ؛ پرنٹ ایف ("ان کی مساوات:% d\n"، i _ ویلیو = = f _ ویلیو) ؛} ان مرتبوں پر جو فلوٹس کو IEEE واحد درستگی کے طور پر لاگو کرتے ہیں، اور کم از کم 32 بٹس کے طور پر انٹس، یہ کوڈ یہ عجیب پرنٹ آؤٹ دے گا: یہ عجیب سلوک فلوٹ میں ایک مضمر تبدیلی کی وجہ سے ہوتا ہے جب اس کے ساتھ موازنہ کیا جاتا ہے۔ تبدیلی درستگی کے نقصان کا سبب بنتی ہے، جو موازنہ سے پہلے اقدار کو برابر بناتی ہے۔ اہم نکات: کٹوتی کا سبب بننا، یعنی فریکشنل حصے کو ہٹانا۔ ہندسوں کو گول کرنے کا سبب بنتا ہے۔ اضافی اعلی آرڈر بٹس کے گرنے کا سبب بنتا ہے۔ ٹائپ پروموشن امپلیسیٹ ٹائپ کنورژن کا ایک خاص معاملہ ٹائپ پروموشن ہے، جہاں ایک آبجیکٹ خود بخود دوسرے ڈیٹا ٹائپ میں تبدیل ہو جاتا ہے جو اصل قسم کے سپرسیٹ کی نمائندگی کرتا ہے۔ تشہیر عام طور پر ٹارگٹ پلیٹ فارم کے ریاضی منطق یونٹ (اے ایل یو) کی مقامی قسم سے چھوٹی اقسام کے ساتھ استعمال کی جاتی ہے، ریاضی اور منطقی کارروائیوں سے پہلے، اس طرح کی کارروائیوں کو ممکن بنانے کے لیے، یا زیادہ موثر اگر اے ایل یو ایک سے زیادہ اقسام کے ساتھ کام کر سکتا ہے۔ سی اور سی + + بولین، کردار، وسیع کردار، گنتی، اور مختصر عدد کی اقسام کی اشیاء کے لیے اس طرح کی تشہیر کرتے ہیں جنہیں انٹ میں فروغ دیا جاتا ہے، اور قسم فلوٹ کی اشیاء کے لیے، جنہیں دوگنا کیا جاتا ہے۔ کچھ دیگر قسم کے تبادلوں کے برعکس، پروموشنز کبھی بھی درستگی سے محروم نہیں ہوتے ہیں یا آبجیکٹ میں محفوظ کردہ قدر میں ترمیم نہیں کرتے ہیں۔ جاوا میں: int x = 3 ؛ ڊبل y = 3.5 ؛ System.out.println (x + y) ؛// آؤٹ پٹ 6.5 ایکسپلیسیٹ ٹائپ کنورژن ہوگا ایکسپلیسیٹ ٹائپ کنورژن، جسے ٹائپ کاسٹنگ بھی کہا جاتا ہے، ایک ٹائپ کنورژن ہے جس کی وضاحت ایک پروگرام کے اندر واضح طور پر کی جاتی ہے (بجائے اس کے کہ یہ امپلیسیٹ ٹائپ کنورژن کے لیے زبان کے اصولوں کے مطابق خود بخود کیا جائے)۔ اس کی درخواست پروگرام میں موجود صارف کرتا ہے۔ ڈبل دا = 3.3 ؛ ڈبل ڈی بی = 3.3 ؛ ڈبل ڈی سی = 3.4 ؛ انٹی نتیجہ = (انٹی) دا + (انٹی) ڈی بی + (انٹی) ڈی سی ؛// نتیجہ = = 9// اگر مضمر تبدیلی استعمال کی جائے گی (جیسا کہ "نتیجہ = دا + ڈی بی + ڈی سی" کے ساتھ)، نتیجہ 10 کے برابر ہوگا۔ واضح تبدیلی کی کئی قسمیں ہیں۔ تبادلوں کو انجام دینے سے پہلے چیک کیا جاتا ہے، یہ دیکھنے کے لیے رن ٹائم چیک کیا جاتا ہے کہ آیا منزل کی قسم ماخذ کی قیمت کو برقرار رکھ سکتی ہے۔ اگر نہیں، تو ایک غلطی کی حالت پیدا ہو جاتی ہے۔ غیر چیک شدہ کوئی چیک نہیں کیا جاتا ہے۔ اگر منزل کی قسم ماخذ کی قیمت کو برقرار نہیں رکھ سکتی ہے، تو نتیجہ غیر متعین ہے۔ بٹ پیٹرن ماخذ کی خام بٹ کی نمائندگی کو لفظی طور پر نقل کیا جاتا ہے، اور اس کی دوبارہ تشریح منزل کی قسم کے مطابق کی جاتی ہے۔ یہ الیازنگ کے ذریعے بھی حاصل کیا جا سکتا ہے۔ آبجیکٹ پر مبنی پروگرامنگ زبانوں میں، آبجیکٹ کو ڈاؤن کاسٹ بھی کیا جا سکتا ہے: بیس کلاس کا حوالہ اس کی ماخوذ کلاسوں میں سے کسی ایک پر ڈالا جاتا ہے۔ سی #اور سی + + سی #میں ٹائپ کی تبدیلی محفوظ یا غیر محفوظ (یعنی سی جیسے) انداز میں کی جا سکتی ہے، پہلے والے کو چیکڈ ٹائپ کاسٹ کہا جاتا ہے۔ جانوروں کا جانور = نئی بلی () ؛ بلڈوگ b = (بلڈوگ) جانور ؛// اگر (جانور بلڈوگ ہے)، stat.type (جانور) بلڈوگ ہے، ورنہ ایک رعایت b = جانور بلڈوگ کے طور پر ؛// اگر (جانور بلڈوگ ہے)، b = (بلڈوگ) جانور، ورنہ b = صفر جانور = صفر ؛ b = جانور بلڈوگ کے طور پر ؛// b = = صفر C + + میں اسی طرح کا اثر C + + طرز کاسٹ نحو کا استعمال کرتے ہوئے حاصل کیا جا سکتا ہے۔ جانور * جانور = نئی بلی ؛ بلڈوگ * b = جامد _ کاسٹ <بلڈوگ *> (جانور) ؛// صرف اس صورت میں مرتب ہوتا ہے جب جانور یا بلڈوگ دوسرے (یا اسی) b = متحرک _ کاسٹ <بلڈوگ *> (جانور) سے ماخوذ ہو ؛// اگر (جانور بلڈوگ ہے)، b = (بلڈوگ *) جانور، ورنہ b = nullptr بلڈوگ & b = جامد _ کاسٹ <بلڈوگ &> (* جانور) ؛// جیسا کہ اوپر بتایا گیا ہے، لیکن اگر ایک nullptr واپس کرنا ہے تو ایک رعایت پھینک دی جائے گی// یہ کوڈ میں نہیں دیکھا جاتا ہے جہاں مستثنی ہینڈلنگ سے گریز کیا جاتا ہے جانور کو حذف کریں ؛// ہمیشہ مفت وسائل جانور = nullptr ؛ b = متحرک _ کاسٹ <بلڈوگ تفویض کا قاعدہ کہتا ہے کہ ایک تفویض، جیسے: x: = y درست ہے اور صرف اس صورت میں جب اس کے ماخذ اظہار کی قسم، اس معاملے میں y، اس کے ہدف وجود کی قسم کے ساتھ مطابقت رکھتی ہے، اس معاملے میں x۔ اس اصول میں، مطابقت کا مطلب یہ ہے کہ ماخذ کے اظہار کی قسم یا تو ہدف کے مطابق ہے یا اس میں تبدیل ہوتی ہے۔ اقسام کی مطابقت کی تعریف آبجیکٹ پر مبنی پروگرامنگ میں پولیمرفزم کے واقف اصولوں سے کی جاتی ہے۔ مثال کے طور پر، مندرجہ بالا تفویض میں، y کی قسم x کی قسم سے مطابقت رکھتی ہے اگر وہ کلاس جس پر y مبنی ہے اس کی نسل ہے جس پر x مبنی ہے۔ ایفل میں ٹائپ کنورژن کی تعریف ایفل میں ٹائپ کنورژن کے اعمال، جو خاص طور پر تبدیل ہوتے ہیں اور سے تبدیل ہوتے ہیں، کی تعریف اس طرح کی جاتی ہے: کلاس سی یو پر مبنی ایک قسم کلاس سی ٹی پر مبنی ٹائپ ٹی میں تبدیل ہو جاتی ہے (اور ٹی یو سے تبدیل ہو جاتا ہے) اگر سی ٹی میں سے کسی ایک میں یو کو تبادلوں کی قسم کے طور پر استعمال کرتے ہوئے تبدیلی کا طریقہ کار ہے، یا سی یو میں تبادلوں کے استفسار کی فہرست ٹی کو تبادلوں کی قسم کے طور پر درج ہے۔ مثال کے طور پر ایفل مائیکروسافٹ. نیٹ فریم ورک کے لیے مکمل طور پر تعمیل کرنے والی زبان ہے۔ . NET کی ترقی سے پہلے، ایفل کے پاس پہلے سے ہی وسیع کلاس لائبریریاں تھیں۔ . NET قسم کی لائبریریوں کا استعمال، خاص طور پر عام طور پر استعمال ہونے والی اقسام جیسے سٹرنگز کے ساتھ، تبدیلی کا مسئلہ پیدا کرتا ہے۔ موجودہ ایفل سافٹ ویئر ایفل لائبریریوں سے سٹرنگ کلاسز (جیسے اسٹرنگ _ 8) کا استعمال کرتا ہے، لیکن. NET کے لیے لکھے گئے ایفل سافٹ ویئر کو بہت سے معاملات میں. NET سٹرنگ کلاس (System.String) کا استعمال کرنا چاہیے، مثال کے طور پر. NET طریقوں کو کال کرتے وقت جو. NET قسم کی اشیاء کو دلائل کے طور پر پاس کرنے کی توقع کرتے ہیں۔ لہذا، ان اقسام کو آگے پیچھے تبدیل کرنا ہر ممکن حد تک ہموار ہونا چاہیے۔ مائی _ سٹرنگ: سٹرنگ _ 8-- مقامی ایفل سٹرنگ مائی _ سسٹم _ سٹرنگ: سسٹم _ سٹرنگ-- مقامی. نیٹ سٹرنگ۔ مائی _ سٹرنگ: = مائی _ سسٹم _ سٹرنگ اوپر کے کوڈ میں، دو تاروں کا اعلان کیا گیا ہے، ہر ایک مختلف قسم میں سے ایک (سسٹم _ سٹرنگ System.String کے لیے ایفل کے مطابق عرفیت ہے)۔ کیونکہ System.String اسٹرنگ _ 8 کے مطابق نہیں ہے، تب اوپر دی گئی تفویض صرف اس صورت میں درست ہے جب System.String اسٹرنگ _ 8 میں تبدیل ہو جائے۔ ایفل کلاس اسٹرینگ _ 8 میں System.String قسم کی اشیاء کے لیے میک _ فرام _ سیل کو تبدیل کرنے کا طریقہ کار ہے۔ تبدیلی کے طریقہ کار کو ہمیشہ تخلیق کے طریقہ کار کے طور پر بھی نامزد کیا جاتا ہے (کنسٹرکٹرز کی طرح)۔ درج ذیل اسٹرینگ _ 8 کلاس کا ایک اقتباس ہے: کلاس اسٹرینگ _ 8۔ میک _ فرام _ سیل بنائیں۔ میک _ فرام _ سیل ({SYSTEM _ STRING}) کو تبدیل کریں۔ تبادلوں کے طریقہ کار کی موجودگی اس تفویض کو بناتی ہے: مائی _ سٹرنگ: = مائی _ سسٹم _ سٹرنگ لفظی طور پر اس کے مساوی ہے: بنائیں my_string.make_from_cil (مائی _ سسٹم _ سٹرنگ) جس میں مائی _ سٹرنگ کو اسٹرنگ _ 8 قسم کے نئے آبجیکٹ کے طور پر بنایا گیا ہے جس میں مائی _ سسٹم _ سٹرنگ کے مساوی مواد ہے۔ اصل ماخذ اور الٹا ہدف کے ساتھ کسی تفویض کو سنبھالنے کے لیے: مائی _ سسٹم _ سٹرنگ: = مائی _ سٹرنگ کلاس اسٹرنگ _ 8 میں ایک تبادلوں کا استفسار بھی ہوتا ہے جو اسٹرنگ _ 8 کی مثال سے ایک System.String تیار کرے گا۔ کلاس اسٹرینگ _ 8۔ میک _ فرام _ سل بنائیں۔ میک _ فرام _ سل ({سسٹم _ اسٹرینگ}) کو _ سل: {سسٹم _ اسٹرینگ} میں تبدیل کریں۔ اسائنمنٹ: مائی _ سسٹم _ سٹرنگ: = مائی _ سٹرنگ پھر، اس کے مساوی ہو جاتا ہے: مائی _ سسٹم _ سٹرنگ: = my_string.to_cil ایفل میں ٹائپ کے تبادلے کے لیے سیٹ اپ کلاس کوڈ میں شامل ہوتا ہے، لیکن پھر کلائنٹ کوڈ میں خود بخود واضح قسم کے تبادلے کے طور پر ظاہر ہوتا ہے۔ اس میں نہ صرف تفویض شامل ہیں بلکہ دیگر قسم کے منسلک بھی شامل ہیں، جیسے دلیل (پیرامیٹر) متبادل۔ زنگ زنگ ابتدائی اقسام کے درمیان کوئی مضمر قسم کی تبدیلی (جبر) فراہم نہیں کرتا ہے۔ لیکن، کلیدی لفظ کے طور پر استعمال کرتے ہوئے واضح قسم کی تبدیلی (کاسٹنگ) کی جا سکتی ہے۔ فرض کریں کہ x = 1000 ؛ پرنٹلن! ("1000 بطور u16 ہے: {}"، x بطور u16) ؛ غیر ٹیگ شدہ یونینوں کا استعمال کرتے ہوئے مضمر کاسٹنگ بہت سی پروگرامنگ زبانیں یونین کی اقسام کی حمایت کرتی ہیں جو متعدد اقسام کی قدر رکھ سکتی ہیں۔ غیر ٹیگ شدہ یونین کچھ زبانوں میں ڈھیلے ٹائپ چیکنگ کے ساتھ فراہم کیے جاتے ہیں، جیسے کہ سی اور پی ایل/آئی، بلکہ اصل پاسکل میں بھی۔ ان کا استعمال ایک قسم کے بٹ پیٹرن کو دوسری قسم کی قدر کے طور پر سمجھنے کے لیے کیا جا سکتا ہے۔ حفاظتی مسائل ہیکنگ میں، ٹائپ کاسٹنگ کسی متغیر کے ڈیٹا ٹائپ کو عارضی طور پر تبدیل کرنے کے لیے ٹائپ کنورژن کا غلط استعمال ہے جس طرح سے اس کی اصل تعریف کی گئی تھی۔ یہ ہیکرز کے لیے مواقع فراہم کرتا ہے کیونکہ ٹائپ میں تبدیلی کے بعد ایک متغیر "ٹائپ کاسٹ" کے بعد ایک مختلف ڈیٹا ٹائپ بن جاتا ہے، مرتب کرنے والا اس ہیک شدہ متغیر کو اس مخصوص آپریشن کے لیے نئے ڈیٹا ٹائپ کے طور پر استعمال کرے گا۔ یہ بھی دیکھیں ڈاؤن کاسٹنگ ٹائپ پننگ حوالہ جات بیرونی لنکس کاسٹنگ ان اڈا کاسٹنگ ان C + + C + + حوالہ گائیڈ مجھے C + + کاسٹ آپریٹرز سے نفرت کیوں ہے، بذریعہ ڈینی کالیو کاسٹنگ ان جاوا امپلیکیٹ کنورژنز ان C #امپلیکیٹ ٹائپ کاسٹنگ ایٹ Cppreference.com اسٹیٹک اینڈ ری انٹرپریٹیشن کاسٹنگ ان C + + اپ کاسٹنگ اینڈ ڈاؤن کاسٹنگ ان F #ڈیٹا ٹائپ آپریٹرز (پروگرامنگ) ٹائپ تھیوری یونری آپریشنز