Castালাই বলতে কী বোঝাতে চাইছেন?


18

সিআই এর মতো নিম্ন স্তরের ভাষাগুলিতে কোডিংয়ের সময় দেখতে পান যে কাস্টিংয়ের অর্থ কখনও কখনও 'এই বাইটগুলি পুনরায় ব্যাখ্যা করা হয় যেন এটি সর্বদা এই অন্য ধরণের ছিল' এবং অন্য সময়ে 'এই মানটি বুদ্ধিমানভাবে এই অন্য ধরণের রূপান্তরিত করে' as

শব্দের আসল অর্থ কী এবং কখন রূপান্তর প্রত্যাশা করা উচিত এবং কখন কাঁচা পুনর্বিবেচনার প্রত্যাশা করাতে কোনও ধারাবাহিকতা রয়েছে?


উইকিপিডিয়া নিবন্ধে এমন কী আছে যা আপনি বুঝতে পারছেন না? " টাইপ রূপান্তর , টাইপকাস্টিং এবং বলপ্রয়োগ বিভিন্ন উপায়ে, অন্য একটি ডেটা প্রকার একজন সত্তা পরিবর্তন করা হচ্ছে ... প্রতিটি প্রোগ্রামিং ভাষা কিভাবে ধরনের পরিবর্তিত করা যায় তার নিজের নিয়ম রয়েছে হয় পরোক্ষভাবে বা স্পষ্টভাবে ..."
মশা

"কাস্ট করা" এর আসল অর্থ প্রোগ্রামিংয়ের সাথে একত্রে নেই, এখানে দেখুন মেরিয়িয়াম
ডক ব্রাউন

1
কাস্ট অপারেটর বিভাগে এরিক লিপার্টের ব্লগে প্রচুর (বেশিরভাগ পরিচালিত ভাষার দৃষ্টিকোণ থেকে)
আকাশম

1
@ গ্যাनेट: আমি নিশ্চিত নই যে এটি কোনও গুরুতর প্রশ্ন বা কেবল একটি ট্রোলিং প্রচেষ্টা attempt তবে আমি জানতে চাই যে এই সংকলকটি কী করবে: কনভার্ট, কাস্ট বা জবরদস্তি করে কী করে? থাম্বের নিয়ম কী?
আলেকজান্ডার টর্সলিং

1
@ ডকব্রাউন আমি মনে করি যে castকম্পিউটিং অর্থে শব্দটি ধাতববিদ্যার অর্থে castালাইয়ের সাথে আরও অনুরূপ , যার ফলে aালতে mাললে গলিত ধাতুর আকৃতিটি সংস্কার করা হয়: ব্রিটানিকা / ইবিচেকড / টপিক / 77776665৫ / মেটালার্জি / ৮৮৮৮৪/ কাস্টিং
কেচালোক্স

উত্তর:


10

সি ভাষায় কাস্টিং অনন্য, অন্য ভাষার মতো নয়। এটি কখনই বুদ্ধিমান হয় না।

সিতে ingালাই সতর্কতার সাথে সংজ্ঞায়িত নিয়ম ব্যবহার করে মানকে এক ধরণের থেকে অন্য ধরণের রূপান্তর করে। আপনার যদি সত্যিই জানা দরকার তবে স্ট্যান্ডার্ডটি পড়ুন। অন্যথায় প্রধান পয়েন্টগুলি হ'ল:

  1. যদি সম্ভব হয় তবে পূর্ণসংখ্যার ধরণের মধ্যে রূপান্তর মান সংরক্ষণ করে। গন্তব্যটিতে আরও বিট থাকলে এটি প্রশস্ত হয় এবং সাধারণত নিরাপদ তবে এতে সাইন এক্সটেনশন জড়িত থাকতে পারে। সংকীর্ণ হলে, বিটগুলি নষ্ট হবে।
  2. পয়েন্টার ধরণের মধ্যে রূপান্তর পয়েন্টার মান সংরক্ষণ করে, তবে ফলাফলগুলি প্রায়শই অপরিজ্ঞাত হয়, প্রায়শই বহনযোগ্য নয় এবং প্রায়শই উন্নত পরিস্থিতিগুলির জন্য দরকারী।
  3. পূর্ণসংখ্যার পরিমাণটি যথেষ্ট বড় হলে এবং সংখ্যার পয়েন্টারগুলির মধ্যে রূপান্তর ঠিক থাকে এবং বিট প্যাটার্নটি সংরক্ষণ করে (যার অর্থ হতে পারে)। যদি পূর্ণসংখ্যা খুব ছোট হয় তবে ফলাফলটি সংজ্ঞায়িত হলেও কার্যকর নয়। একটি নিয়ম হিসাবে 'দীর্ঘ' 'শূন্য *' এর পক্ষে যথেষ্ট প্রশস্ত, তবে কোনও গ্যারান্টি নেই! এইভাবে তৈরি পয়েন্টারগুলি সমস্ত ধরণের আকর্ষণীয় উপায়ে অবৈধ হতে পারে।
  4. ভাসা এবং পূর্ণসংখ্যার প্রকারের মধ্যে রূপান্তর হ'ল পাটিগণিত রূপান্তরগুলি উপযুক্ত লাইব্রেরি রুটিন দ্বারা সংজ্ঞায়িত করা হয় (কাটানো নয়, গোল হয় না)।
  5. আপনি কোনও ফাংশনের রিটার্ন মান বাতিল করতে পারবেন। আমার কখনই নেই। এটা কিছুই করে না।

কিছু ক্যাসেট সুস্পষ্টভাবে প্রয়োগ করা হয়, এবং এর কয়েকটিতে সংকলক একটি সতর্কতা জারি করবে। সতর্কতা অবলম্বন সেরা!

Castালাইয়ের জন্য অভিধানের সংজ্ঞাটি সবচেয়ে বেশি উপেক্ষা করা হয়েছে, যেমন সহায়তা করা হয়নি। রূপান্তর বা জবরদস্তি শর্তাবলী দ্বারা অনেকগুলি বর্ণকে আরও ভালভাবে বর্ণনা করা হয়, সুতরাং সেগুলিও জানার মতো।

সি ++ অনেক জটিল, তবে আপনি এটি জিজ্ঞাসা করেননি, তাই না?


আমি থাম্বের নিয়মগুলিতে আগ্রহী, এবং বিশদটি ছোট করে দেখি না, তবে আমি সি ছাড়া অন্য ভাষায় আগ্রহী যদি এটি জিনিস পরিষ্কার করতে সহায়তা করে।
আলেকজান্ডার টর্সলিং

2
আমি এখানে যা দিয়েছি তা যথাযথ হিসাবে জেনেরিক। বাস্তব, নিম্ন স্তরের পেশাদার সি / সি ++ কোড লিখতে মিনিস্কুলের বিশদটি গুরুত্বপূর্ণ। বেশিরভাগ ভাষায় কেবল তাদের ধরণের রূপান্তরগুলিতে এই জাতীয় সমস্যা থাকে না। এটি যদি আপনার সমস্যার সমাধান না করে তবে দুঃখিত।
ডেভিড.পিএফএফএক্স

ব্যতীত যা থেকে রূপান্তর T*করতে void*এবং ফিরে সবসময় ভালভাবে সংজ্ঞায়িত করা হয়।
মাইলস রাউন্ড

@ মাইলস: আসলে, টি * কে যে কোনও ইউ * এবং পিছনে রূপান্তর করার জন্য মূল পয়েন্টারটির মান সংরক্ষণ করা প্রয়োজন to আমার উত্তরে আমি কেবল এটিকে ছোট রাখতে 'প্রায়শই অপরিজ্ঞাত' বলেছিলাম, 'কিছু বিবরণ খুব অগোছালো।
david.pfx

1
@ সুপের্যাট: দেখুন এন 1570 এস 6.3.2.3। টি *, ইউ * এবং অকার্যকর * এর মধ্যে রূপান্তর / রাউন্ড-ট্রিপিং সর্বদা পয়েন্টার মানটি কেবলমাত্র একটি ব্যতিক্রম সহ সংরক্ষণ করে। যদি কোনও টি * সঠিকভাবে সংযুক্ত না হয়, তবে এটি অপরিবর্তিত আচরণ। আমি আপনার বক্তব্য গ্রহণ করি, তবে কেবলমাত্র সেই পরিমাণে।
ডেভিড.পিএফএফএক্স

2

ওয়েবস্টার অভিধানের এই অংশটি সঠিক সংজ্ঞা দেয়:

একটি: একটি ছাঁচে তরল বা প্লাস্টিকের ফর্ম andেলে এবং চাপ ছাড়াই শক্ত করে দেওয়া দিয়ে (কোনও পদার্থকে) একটি আকৃতি দেওয়া
খ: এই প্রক্রিয়াটি দ্বারা গঠনের জন্য

সুতরাং, ingালাইয়ের আগে আপনার "অবজেক্ট" (আক্ষরিক অর্থে কোনও ওওপি অবজেক্ট নয়) একটি প্রদত্ত আকারে (টাইপ) রয়েছে। আপনি যখন এটি পুনরায় কাস্ট করেন তখন এটিকে নতুন আকারে পরিণত করার জন্য এটি "কংক্রিট pourালা" হয়, যা আপনি ingালাইয়ের সাথে করেন। ষড়ভুজ আকৃতির পূর্ণসংখ্যার হিসাবে আপনার একটি নম্বর রয়েছে এবং কাস্টিংয়ের পরে আপনি একটি আয়তক্ষেত্র আকারের স্ট্রিং পাবেন।


2
এছাড়াও : "(একজন অভিনেতা) কে একটি নির্দিষ্ট ভূমিকা অর্পণ করা"।
কেলি টমাস

হা. আমি নিশ্চিত যে এটি সেরা। +1 টি।
ডেভিড.পিএফএফএক্স

2

সি কাস্ট দুটি গ্রুপে পৃথক করা কার্যকর হতে পারে:

  1. সংখ্যাযুক্ত কাস্ট - মান রাখার চেষ্টা করে একটি প্রতিনিধিত্বের মধ্যে একটি সংখ্যাকে রূপান্তর করুন। উদাহরণস্বরূপ - (int)3.1হবে 3। সঠিক মানটি রাখা যায় না তখন কী হয় তা নির্ধারণ করার জন্য সঠিক নিয়ম রয়েছে।

  2. পয়েন্টার কাস্টস - মেমরি ঠিকানা রাখুন, তবে এটি যেভাবে অবলম্বন করা হয়েছে তা পরিবর্তন করুন। উদাহরণস্বরূপ, জন্য float x=3.5, *(int *)&xদেবে 1080033280- এই পূর্ণসংখ্যাটি একই বিট প্যাটার্ন দ্বারা উপস্থাপিত হয় যা ভাসা প্রতিনিধিত্ব করে 3.5


Keep the memory address, but change the way it's dereferenced.একটি টাইপ-পেনড পয়েন্টারটিকে নির্ধারণ করা হয় না। স্ট্যান্ডার্ড শুধুমাত্র থেকে কাস্ট গ্যারান্টী বা নিশ্চয়তা দিচ্ছে A *করার B *& ফিরুন একই উত্পাদন করা হবে A *, যা 1 ম জায়গায় dereference যাও বৈধ হয়েছে না পারে - অথবা যদি যে B *একটি হল char *, এটা কোনো ধরনের বস্তুর উপস্থাপনা পড়তে ব্যবহার করা যাবে। অন্যান্য সমস্ত ধরণের ক্ষেত্রে, ডিফারেন্সিং B *পয়েন্টারটি হ'ল টাইপ-পেনিং, ইউবি, এবং কঠোর অ্যালাইজিং লঙ্ঘন করে। যাইহোক, সংকলকও সেই কারণে উপরোক্ত উদাহরণটি ট্র্যাশ না করলেও, আপনি বিট নিদর্শনগুলি সম্পর্কে অপ্রয়োজনীয় অনুমান করছেন
আন্ডারস্কোর_১

1
cast (v): to receive form in a mold

সি ++ তে বিভিন্ন ধরণের বর্ণকে আরও স্পষ্ট করে বলা যায়, যার reinterpret_castঅর্থ "এই বাইটগুলি এমনভাবে আচরণ করুন যেন তারা ইতিমধ্যে এই অন্য জিনিস"। সিতে আপনি এটি ব্যবহার করে একেবারে স্পষ্ট করে তুলতে পারেন union, (type)অপারেটরের সাথে castালাই নির্ভুলতা হ্রাস অবধি ফলাফলকে সংখ্যার সাথে সমতুল্য রাখার চেষ্টা করবে।


2
সি পয়েন্টারে কাস্টগুলি সর্বদা পুনরায় ব্যাখ্যা এবং মান কাস্টগুলি সর্বদা সর্বোত্তম হিসাবে মান সংরক্ষণ করে। সি ++ তে পয়েন্টার কাস্ট করার একাধিক উপায় রয়েছে, এজন্য আরও স্পষ্টতই কাস্ট প্রকার রয়েছে।
জানু হুডেক

সি পয়েন্টার-কাস্ট শব্দার্থবিজ্ঞান অগত্যা "পুনরায় ব্যাখ্যা" নয়। এটি এমন কোনও প্রসেসরের পক্ষে বৈধ হবে যা শব্দ সম্বোধন ব্যবহার করে তবে বাইট-ভিত্তিক কোডের সাথে int*একটি শব্দ এবং char*দুটি শব্দ যা একটি শব্দ ছিল [দ্বিতীয় বাইটটি একটি শব্দের উচ্চ বা নিম্ন বাইট নির্বাচন করে] রাখতে সুন্দরভাবে ইন্টারেক্ট করতে চেয়েছিল । একটি কাস্ট (int*)করার (char*)জন্য একটি অতিরিক্ত শব্দের সংযোজন প্রয়োজন যা মানটির প্রথম বাইটটি নির্দিষ্ট করে এমনটি হওয়া উচিত int
সুপারক্যাট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.