এটি বেশিরভাগ ক্ষেত্রে দ্বিতীয় লাইনে সম্বোধন করে: সেরা অনুশীলন, অ্যাসাইনমেন্ট, ফাংশন প্যারামিটার ইত্যাদি
সাধারণ অভ্যাস. আপনি যা পারেন সব কিছু করার চেষ্টা করুন const
। বা অন্য কোনও উপায়ে বলতে const
গেলে, সবকিছু দিয়ে শুরু করার চেষ্টা করুন এবং তারপরে const
প্রোগ্রামটি কাজ করার অনুমতি দেওয়ার জন্য প্রয়োজনীয় ন্যূনতম সেটটি সরিয়ে দিন । কনস্ট্যান্ট-নির্ভুলতা অর্জনে এটি একটি বড় সহায়তা হবে এবং লোকেরা যখন এমন কিছু করার চেষ্টা করে যেগুলি তাদের সংশোধন করার কথা নয় তখন তাদের সূক্ষ্ম বাগগুলি প্রবর্তিত না হয় তা নিশ্চিত করতে সহায়তা করবে help
প্লেগের মতো কনস্ট_কাস্ট <> এড়িয়ে চলুন। এটির জন্য এক বা দুটি বৈধ ব্যবহারের কেস রয়েছে তবে সেগুলি খুব কম এবং এর মধ্যে খুব বেশি। যদি আপনি কোনও বিষয়বস্তু পরিবর্তন করার চেষ্টা করছেন const
, আপনি যাকে const
প্রথম গতিতে ঘোষণা করেছেন তা খুঁজে বের করার জন্য এবং তার কী হবে তা নিয়ে conকমত্যে পৌঁছানোর জন্য তাদের সাথে বিষয়টি নিয়ে কথা বলার জন্য আপনি আরও অনেক বেশি কিছু করতে পারেন।
যা অ্যাসাইনমেন্টগুলিতে খুব ঝরঝরে করে নিয়ে যায়। আপনি যদি কোনও কিছু নির্ধারণ করতে পারেন তবে তা অবিচ্ছিন্ন। যদি আপনি কনস্টেন্ট এমন কোনও কিছুতে নির্ধারণ করতে চান তবে উপরে দেখুন। মনে রাখবেন যে ঘোষণাগুলিতে int const *foo;
এবং int * const bar;
বিভিন্ন জিনিসগুলি হ'ল const
- এখানে অন্যান্য উত্তরগুলি সেই সমস্যাটি প্রশংসিতভাবে coveredেকে রেখেছে, তাই আমি তাতে প্রবেশ করব না।
ফাংশন পরামিতি:
মান দ্বারা পাস: উদাহরণস্বরূপ void func(int param)
আপনি কলিং সাইটে এক উপায় বা অন্যদিকে যত্ন নেই। যুক্তিটি তৈরি করা যেতে পারে যে ফাংশনটি ডিক্লেয়ার করার জন্য ব্যবহারের কেস void func(int const param)
রয়েছে তবে কেবলমাত্র ফাংশনটিতে কলারের উপর এর কোনও প্রভাব নেই, এতে যে মানটি পাস হয় তা কল করার সময় ফাংশন দ্বারা পরিবর্তন করা যায় না।
রেফারেন্স দ্বারা পাস: যেমন void func(int ¶m)
এখন এটি একটি পার্থক্য করে। যেমন ঘোষিত func
হয়েছে পরিবর্তনের অনুমতি দেওয়া হয়েছেparam
এবং যে কোনও কলিং সাইট পরিণতি মোকাবেলা করার জন্য প্রস্তুত থাকতে হবে। ঘোষণা void func(int const ¶m)
পরিবর্তন করে চুক্তি পরিবর্তন করে, এবং গ্যারান্টি দেয় যা func
এখন পরিবর্তন করতে পারে না param
, যার অর্থ যা পাস হয়েছিল তা হ'ল ফিরে আসবে। অন্যরা যেমন উল্লেখ করেছে যে আপনি যে কোনও বড় অব্জেক্ট পরিবর্তন করতে চান না তা সস্তাভাবে পাস করার জন্য এটি খুব কার্যকর। একটি বড় রেফারেন্সকে মান দ্বারা পাস করার চেয়ে রেফারেন্স পাস করা অনেক সস্তা।
পয়েন্টার দিয়ে পাস করুন: উদাহরণস্বরূপ void func(int *param)
এবং void func(int const *param)
এই দু'টি তাদের রেফারেন্স সমকক্ষগুলির সাথে অনেকটা সমার্থক, যাঁর নামক ফাংশনটি এখন nullptr
অন্য কোনও চুক্তিভিত্তিক গ্যারান্টি আশ্বাস না দিলে পরীক্ষা করা দরকার withfunc
যে এটি একটি গ্রহণ করবে না nullptr
এ param
।
এই বিষয়ে মতামত টুকরা। এরকম ক্ষেত্রে যথার্থতা প্রমাণ করা নরকীয়ভাবে কঠিন, ভুল করা খুব সহজ। সুতরাং সম্ভাবনা নেবেন না এবং সর্বদা এর জন্য পয়েন্টার পরামিতিগুলি পরীক্ষা করুনnullptr
। আপনি দীর্ঘমেয়াদে নিজেকে ব্যথা এবং যন্ত্রণা এবং ত্রুটিগুলি খুঁজে পাওয়া শক্ত করবেন will এবং চেকের ব্যয় হিসাবে, এটি ময়লা সস্তা, এবং যে ক্ষেত্রে সংকলকটিতে নির্মিত স্থির বিশ্লেষণ এটি পরিচালনা করতে পারে, অপটিমাইজার যেকোনভাবে এটি এডিট করবে। এমএসভিসির জন্য লিংক টাইম কোড জেনারেশন, বা জিসিসির জন্য ডাব্লুওপিআর (আমার মনে হয়) চালু করুন এবং আপনি এটি প্রশস্ত প্রোগ্রাম পাবেন, এমনকি এমন কোনও ফাংশন কলগুলিতে যা উত্স কোড মডিউল সীমানা অতিক্রম করে।
দিনের শেষে উপরের সমস্তগুলি সর্বদা পয়েন্টারগুলিতে রেফারেন্স পছন্দ করতে একটি খুব শক্ত কেস তৈরি করে। তারা কেবল চারদিকে নিরাপদ।