বাস্তবায়ন-সংজ্ঞায়িত আচরণ এবং অপরিবর্তিত আচরণ
C ++ স্ট্যান্ডার্ডের বিভিন্ন নির্মানের প্রভাব সম্পর্কে খুব নির্দিষ্ট হয়, এবং বিশেষ করে আপনি সবসময় এই শ্রেণীর সচেতন হওয়া উচিত কষ্ট :
অপরিজ্ঞাত আচরণের অর্থ হ'ল কোনও গ্যারান্টি নেই। কোডটি কাজ করতে পারে, বা এটি আপনার হার্ডড্রাইভকে আগুন ধরিয়ে দিতে পারে বা ভূতগুলিকে আপনার নাক উড়িয়ে দিতে পারে । যতদূর সি ++ ভাষা সম্পর্কিত, একেবারে কিছু ঘটতে পারে। ব্যবহারিক দিক থেকে, এর অর্থ সাধারণত আপনার কাছে একটি অপরিশোধনযোগ্য ত্রুটি রয়েছে। যদি সেটা হয়, আপনি কি সত্যিই বিশ্বাস করতে পারি না কিছু আপনার আবেদন সম্পর্কে (কারণ এই অনির্ধারিত আচরণ প্রভাব এক মাত্র আপনার অ্যাপ বাকি দ্বারা ব্যবহৃত মেমরি আপ জগাখিচুড়ি হয়েছে পারে)। এটি ধারাবাহিক হওয়ার প্রয়োজন নেই, সুতরাং প্রোগ্রামটি দু'বার চালানো বিভিন্ন ফলাফল দিতে পারে। এটি চাঁদের পর্যায়ক্রমে, আপনি যে শার্টটি পরেছেন তার রঙ বা অন্য কোনও কিছুর উপর নির্ভর করে।
অনির্ধারিত আচরণের অর্থ হল যে প্রোগ্রামটি অবশ্যই বুদ্ধিমান এবং সামঞ্জস্যপূর্ণ কিছু করবে তবে এটি নথিভুক্ত করার প্রয়োজন নেই ।
বাস্তবায়ন-সংজ্ঞায়িত আচরণ অনির্ধারিত অনুরূপ, তবে সংকলক লেখকরাও এটি নথিভুক্ত করতে হবে। এর উদাহরণ এ এর ফলাফল reinterpret_cast
। সাধারণত , ঠিকানাটি পরিবর্তন না করে এটি কেবলমাত্র কোনও পয়েন্টারের ধরণের পরিবর্তন করে তবে ম্যাপিংটি বাস্তবায়ন-সংজ্ঞায়িত হয়, তাই কোনও সংকলক এই পছন্দটিকে নথিভুক্ত না করেই সম্পূর্ণ ভিন্ন ঠিকানায় মানচিত্র করতে পারে । আর একটি উদাহরণ একটি int এর আকার। সি ++ স্ট্যান্ডার্ড এটি 2, 4 বা 8 বাইট হয় তা বিবেচনা করে না, তবে এটি অবশ্যই সংকলক দ্বারা নথিভুক্ত করা উচিত
তবে এই সমস্তগুলির জন্য সাধারণ এটি সর্বোত্তম এড়ানো। সম্ভব হলে, এমন আচরণের সাথে লেগে থাকুন যা সি ++ স্ট্যান্ডার্ড নিজেই 100% নির্দিষ্ট করে। এইভাবে, আপনি গ্যারান্টিযুক্ত বহনযোগ্যতা।
আপনাকে প্রায়শই কিছু বাস্তবায়ন-সংজ্ঞায়িত আচরণের উপরও নির্ভর করতে হয়। এটি অনিবার্য হতে পারে তবে আপনার এটির দিকে মনোযোগ দেওয়া উচিত এবং সচেতন হন যে আপনি এমন কোনও কিছুর উপর নির্ভর করছেন যা বিভিন্ন সংকলকগুলির মধ্যে পরিবর্তিত হতে পারে।
অপরপক্ষে নির্ধারিত আচরণ সর্বদা এড়ানো উচিত । সাধারণভাবে, আপনার কেবলমাত্র ধরে নেওয়া উচিত যে এটি আপনার প্রোগ্রামকে একরকম বা অন্য কোনও উপায়ে বিস্ফোরিত করে।