কারণটি হ'ল যদি ক্লাসটির কোনও ব্যবহারকারী নির্ধারিত কনস্ট্রাক্টর না থাকে তবে তা পিওডি হতে পারে এবং পিওড ক্লাসটি ডিফল্টরূপে আরম্ভ হয় না। সুতরাং আপনি যদি পিওডের কোন কনস্টেবল অবজেক্টটি ঘোষণা করেন যা অবিচ্ছিন্ন হয়, তবে এর কী ব্যবহার? সুতরাং আমি মনে করি মানকটি এই বিধিটি প্রয়োগ করে যাতে বস্তুটি আসলে কার্যকর হতে পারে।
struct POD
{
int i;
};
POD p1;
p1.i = 10;
POD p2 = POD();
const POD p3 = POD();
const POD p4;
তবে আপনি যদি ক্লাসটিকে একটি নন-পিওড করেন:
struct nonPOD_A
{
nonPOD_A() {}
};
nonPOD_A a1;
const nonPOD_A a2;
POD এবং নন-পডের মধ্যে পার্থক্যটি নোট করুন।
ব্যবহারকারী-সংজ্ঞায়িত কনস্ট্রাক্টর ক্লাসকে নন-পিওডি করার একটি উপায়। আপনি এটি করতে পারেন বিভিন্ন উপায়।
struct nonPOD_B
{
virtual void f() {}
};
nonPOD_B b1;
const nonPOD_B b2;
লক্ষ্য করুন ননপোড_বি ব্যবহারকারী-সংজ্ঞায়িত নির্মাণকারীর সংজ্ঞা দেয় না। এটি সংকলন। এটি সংকলন করবে:
এবং ভার্চুয়াল ফাংশন মন্তব্য করুন, তারপরে এটি ত্রুটি দেয়, যেমনটি প্রত্যাশিত:
ঠিক আছে, আমি মনে করি, আপনি উত্তরণকে ভুল বুঝেছিলেন। এটি প্রথম এটি বলে (§8.5 / 9):
যদি কোনও বস্তুর জন্য কোনও আরম্ভকারী নির্দিষ্ট করা না থাকে এবং অবজেক্টটি (সম্ভবত সিভি-যোগ্যতাসম্পন্ন) নন-পিওডি শ্রেণীর ধরণের (বা এর অ্যারে) হয় তবে অবজেক্টটি ডিফল্ট-আরম্ভ হবে; [...]
এটি নন-পিওডি ক্লাসটি সম্ভবত সিভি-কোয়ালিফাইড টাইপ সম্পর্কে কথা বলে। অর্থাত্, যদি কোনও প্রাথমিক নির্দেশক নির্দিষ্ট না থাকে তবে নন-পিওডি অবজেক্টটি ডিফল্ট-আরম্ভ হবে। এবং ডিফল্ট-আরম্ভ কি? নন-পিওডি-র জন্য, অনুমানগুলি (.58.5 / 5) বলে,
টাইপ টির কোনও অবজেক্টের ডিফল্ট-আরম্ভ করার জন্য:
- টি যদি টি-পি-ওডি ক্লাসের ধরণ (ধারা 9) হয় তবে টির জন্য ডিফল্ট কনস্ট্রাক্টর বলা হয় (এবং টি যদি অ্যাক্সেসযোগ্য ডিফল্ট কনস্ট্রাক্টর না থাকে তবে ইনিশিয়েশনটি খারাপ-গঠিত হয়);
এটি কেবল টির ডিফল্ট নির্মাতা সম্পর্কে আলোচনা করে , এর ব্যবহারকারী সংজ্ঞায়িত বা সংকলক উত্পাদিত অপ্রাসঙ্গিক কিনা।
যদি আপনি এটি পরিষ্কার করে থাকেন তবে অনুমান করুন পরবর্তীটি কী বলে ((§8.5 / 9),
[...]; যদি অবজেক্টটি কনস্ট-কোয়ালিফাইড টাইপের হয় তবে অন্তর্নিহিত বর্গের ধরণটিতে একটি ব্যবহারকারী-ঘোষিত ডিফল্ট কনস্ট্রাক্টর থাকবে।
সুতরাং এই পাঠ্যটি ইঙ্গিত করে, যদি বিষয়টি কনস্ট- কোয়ালিটিড পিওডি টাইপের হয় এবং প্রোগ্রামটির কোনও প্রাথমিক নির্দেশক নির্দিষ্ট না করা থাকে (কারণ পিওডি ডিফল্ট আরম্ভ নয়):
POD p1;
const POD p2;
যাইহোক, এটি জরিমানা সংকলন করে কারণ এর নন-পিওডি, এবং এটি ডিফল্ট-আরম্ভ করা যেতে পারে ।
a, কিন্তু জিসিসি-4.3.4 এটিকে স্বীকার এমনকি যখন আপনি (দেখতে পাচ্ছ ideone.com/uHvFS )