সংজ্ঞাগুলি ভুলে যান
তারা আপনার কোডকে দূষিত করবে।
bitfields?
struct RecordFlag {
unsigned isnew:1, isdeleted:1, ismodified:1, isexisting:1;
};
কখনও যে ব্যবহার করবেন না । 4 ইনটকে অর্থনৈতিক করার চেয়ে আপনি গতির সাথে বেশি চিন্তিত। বিট ক্ষেত্রগুলি ব্যবহার করা অন্য যে কোনও ধরণের অ্যাক্সেসের চেয়ে ধীর।
তবে স্ট্রটে বিট সদস্যদের ব্যবহারিক ঘাটতি রয়েছে। প্রথমত, মেমরিতে বিটের ক্রম সংকলক থেকে সংকলক পর্যন্ত পরিবর্তিত হয়। এছাড়াও, অনেক জনপ্রিয় সংকলক বিট সদস্যগুলি পড়ার জন্য এবং লেখার জন্য অযোগ্য কোড তৈরি করে এবং বিট ক্ষেত্রগুলি সম্পর্কিত বিশেষত গুরুতর থ্রেড সুরক্ষার সমস্যা রয়েছে (বিশেষত মাল্টিপ্রসেসর সিস্টেমগুলিতে) যে কারণে বেশিরভাগ মেশিনগুলি মেমরির বিটগুলির নির্বিচার সেটগুলি পরিচালনা করতে পারে না, তবে এর পরিবর্তে পুরো শব্দ লোড এবং সংরক্ষণ করতে হবে। যেমন নিঃশব্দ ব্যবহার না করেও নিম্নলিখিতটি থ্রেড-নিরাপদ হবে না
সূত্র: http://en.wikedia.org/wiki/Bit_field :
এবং যদি আপনার বিটফিল্ড না ব্যবহার করার আরও কারণ প্রয়োজন হয় তবে সম্ভবত রেমন্ড চেন আপনাকে তাঁর ওল্ড নিউ থিং পোস্টে বোঝাতে পারবেন : http://blogs.msdn.com/oldnewthing/ এ বুলিয়ান সংগ্রহের জন্য বিটফিল্ডগুলির ব্যয়-বেনিফিট বিশ্লেষণ সংরক্ষণাগার / 2008/11/26 / 9143050.aspx
কনট ইনট?
namespace RecordType {
static const uint8 xNew = 1;
static const uint8 xDeleted = 2;
static const uint8 xModified = 4;
static const uint8 xExisting = 8;
}
এগুলিকে একটি নেমস্পেসে রাখা দুর্দান্ত। সেগুলি যদি আপনার সিপিপি বা শিরোলেখ ফাইলটিতে ঘোষণা করা হয় তবে তাদের মানগুলি ইনলাইন করা হবে। আপনি এই মানগুলিতে স্যুইচ ব্যবহার করতে সক্ষম হবেন তবে এটি মিলন সামান্য বাড়বে।
আহ, হ্যাঁ: স্থিতিশীল কীওয়ার্ডটি সরান । স্ট্যাটিকটি সি ++ এ হ্রাস করা হয় যখন আপনি যেমন ব্যবহার করেন এবং uint8 যদি বিল্টিন টাইপ হয় তবে একই মডিউলের একাধিক উত্স দ্বারা অন্তর্ভুক্ত শিরোনামে এটি প্রকাশ করার জন্য আপনার এটির প্রয়োজন হবে না। শেষ পর্যন্ত, কোডটি হওয়া উচিত:
namespace RecordType {
const uint8 xNew = 1;
const uint8 xDeleted = 2;
const uint8 xModified = 4;
const uint8 xExisting = 8;
}
এই পদ্ধতির সমস্যাটি হ'ল আপনার কোডটি আপনার ধ্রুবকের মান জানে যা সংযোজনকে কিছুটা বাড়ায়।
enum
কিছুটা শক্তিশালী টাইপিং সহ কনট ইন্ট হিসাবে একই।
typedef enum { xNew = 1, xDeleted, xModified = 4, xExisting = 8 } RecordType;
যদিও তারা এখনও বিশ্বব্যাপী নেমস্পেসকে দূষিত করছে। যাইহোক ... টাইপেডেফ সরান । আপনি সি ++ এ কাজ করছেন। এনাম এবং স্ট্রাক্টগুলির সেই টাইপিডগুলি কোডকে অন্য যে কোনও কিছুর চেয়ে বেশি দূষিত করছে।
ফলাফল কৃপা:
enum RecordType { xNew = 1, xDeleted, xModified = 4, xExisting = 8 } ;
void doSomething(RecordType p_eMyEnum)
{
if(p_eMyEnum == xNew)
{
// etc.
}
}
যেমন আপনি দেখতে পাচ্ছেন, আপনার এনাম বিশ্বব্যাপী নেমস্পেসকে দূষিত করছে। আপনি যদি এই এনামটিকে কোনও একটি নাম স্থানটিতে রাখেন তবে আপনার মতো কিছু থাকবে:
namespace RecordType {
enum Value { xNew = 1, xDeleted, xModified = 4, xExisting = 8 } ;
}
void doSomething(RecordType::Value p_eMyEnum)
{
if(p_eMyEnum == RecordType::xNew)
{
// etc.
}
}
বাহ্যিক কনট ইনট?
আপনি যদি সংযুক্তিকে হ্রাস করতে চান (অর্থাত্ কনস্ট্যান্টগুলির মানগুলি আড়াল করতে সক্ষম হচ্ছেন এবং তাই, পুরো পুনঃসংশোধনের প্রয়োজন ছাড়াই তাদের পছন্দসই রূপান্তর করুন), আপনি শিরোনামের বাহ্যিক হিসাবে সিপিপি এবং সিপিপি ফাইলে স্থির হিসাবে ঘোষণা করতে পারেন , নিম্নলিখিত উদাহরণ হিসাবে:
// Header.hpp
namespace RecordType {
extern const uint8 xNew ;
extern const uint8 xDeleted ;
extern const uint8 xModified ;
extern const uint8 xExisting ;
}
এবং:
// Source.hpp
namespace RecordType {
const uint8 xNew = 1;
const uint8 xDeleted = 2;
const uint8 xModified = 4;
const uint8 xExisting = 8;
}
যদিও আপনি এই ধ্রুবকগুলিতে স্যুইচ ব্যবহার করতে সক্ষম হবেন না। সুতরাং শেষ পর্যন্ত, আপনার বিষ বাছুন ... :-p