অ্যাঞ্জু এবং জ্যাজডস্পায়ারের উত্তরগুলি দুর্দান্ত এবং এতে প্রযোজ্যসি ++ 11। এবংসি ++ 14। এবংসি ++ 17।
তবে, ইন সি ++ 20, জিনিসগুলি কিছুটা বদলে যায় এবং ওপিতে উদাহরণটি আর সংকলন করে না:
class C {
C() = default;
};
C p;
auto q = C();
C r{};
auto s = C{};
দুটি উত্তরের দ্বারা নির্দেশিত হিসাবে, দ্বিতীয় দুটি ঘোষণাপত্রের কাজটি কারণ C
একটি সমষ্টি এবং এটি সামগ্রিক-সূচনা। যাইহোক, পি 1008 এর ফলাফল হিসাবে (ওপি থেকে খুব আলাদা নয় এমন একটি অনুপ্রেরণামূলক উদাহরণ ব্যবহার করে), [dcl.init.aggr] / 1 থেকে সি ++ 20 তে সামগ্রিক পরিবর্তনের সংজ্ঞা :
সমষ্টিগত হ'ল একটি অ্যারে বা একটি শ্রেণি ([শ্রেণী])
- কোনও ব্যবহারকারী-ঘোষিত বা উত্তরাধিকারসূতী নির্মাণকারী ([শ্রেণি.কমর]),
- কোনও ব্যক্তিগত বা সুরক্ষিত সরাসরি অ-স্থিতিশীল ডেটা সদস্য নয় ([শ্রেণী.অ্যাক্সেস]),
- কোনও ভার্চুয়াল ফাংশন ([শ্রেণি। ভার্চুয়াল]), এবং
- ভার্চুয়াল, প্রাইভেট, বা সুরক্ষিত বেস ক্লাস নেই ([class.mi])।
জোর আমার। এখন প্রয়োজনীয়তা কোনও ব্যবহারকারী-ঘোষিত কনস্ট্রাক্টর নয়, যেখানে এটি ব্যবহৃত হত (উভয় ব্যবহারকারী তাদের উত্তরে উদ্ধৃত করেছেন এবং সি ++ 11 , সি ++ 14 , এবং সি ++ 17 এর জন্য historতিহাসিকভাবে দেখা যেতে পারে ) কোনও ব্যবহারকারী-সরবরাহকারী কনস্ট্রাক্টর নেই । এর জন্য ডিফল্ট কনস্ট্রাক্টরটি C
ব্যবহারকারী-ঘোষিত, তবে ব্যবহারকারীর দ্বারা সরবরাহিত নয়, এবং তাই C ++ 20 এ সমষ্টি হতে পারে।
এখানে সামগ্রিক পরিবর্তনের আরেকটি উদাহরণস্বরূপ উদাহরণ রয়েছে:
class A { protected: A() { }; };
struct B : A { B() = default; };
auto x = B{};
B
সি ++ 11 বা সি ++ 14 এ মোট সমষ্টি ছিল না কারণ এটির একটি বেস শ্রেণি রয়েছে। ফলস্বরূপ, B{}
কেবলমাত্র ডিফল্ট কনস্ট্রাক্টরকে (ব্যবহারকারী দ্বারা ঘোষিত তবে ব্যবহারকারী দ্বারা সরবরাহিত নয়) অনুরোধ জানানো হয়েছে, যার A
সুরক্ষিত ডিফল্ট কনস্ট্রাক্টরের অ্যাক্সেস রয়েছে ।
সি ++ 17 তে, P0017 এর ফলাফল হিসাবে , বেস ক্লাসগুলির অনুমতি দেওয়ার জন্য সমষ্টিগুলি বাড়ানো হয়েছিল। B
সি ++ 17 এ একটি সমষ্টি, যার অর্থ B{}
হ'ল সমষ্টিগত-ইনিশিয়ালাইজেশন যা সাবোবজেক্ট সহ সমস্ত সাবওজেক্টগুলি আরম্ভ করতে হয় A
। তবে A
এর ডিফল্ট কনস্ট্রাক্টর সুরক্ষিত থাকার কারণে আমাদের এতে অ্যাক্সেস নেই, তাই এই সূচনাটি দুর্গঠিত।
সি ++ ২০-এ, B
ব্যবহারকারী দ্বারা B{}
নির্ধারিত কনস্ট্রাক্টরের কারণে এটি আবার সমষ্টি হিসাবে বন্ধ হয়ে যায়, তাই এটি ডিফল্ট কনস্ট্রাক্টরকে অনুরোধ করতে ফিরে আসে এবং এটি আবার সু-গঠিত সূচনা হয়।
C c{};
সামগ্রিক সূচনা কি কোনও নির্মাণকারীকে বলা হয় না?