संभवतः C ++ 11 में इसका क्या अर्थ हो सकता है?
struct : bar {} foo {};
संभवतः C ++ 11 में इसका क्या अर्थ हो सकता है?
struct : bar {} foo {};
जवाबों:
सबसे पहले, हम एक दलदल मानक सार UDT (उपयोगकर्ता-परिभाषित प्रकार) लेंगे:
struct foo { virtual void f() = 0; }; // normal abstract type
foo obj;
// error: cannot declare variable 'obj' to be of abstract type 'foo'
आइए हम यह भी याद रखें कि हम उसी समय यूडीटी को तुरंत परिभाषित कर सकते हैं, जिसे हम इसे परिभाषित करते हैं:
struct foo { foo() { cout << "!"; } }; // just a definition
struct foo { foo() { cout << "!"; } } instance; // so much more
// Output: "!"
आइए उदाहरणों को मिलाएं, और याद रखें कि हम एक यूडीटी को परिभाषित कर सकते हैं जिसका कोई नाम नहीं है :
struct { virtual void f() = 0; } instance; // unnamed abstract type
// error: cannot declare variable 'instance' to be of abstract type '<anonymous struct>'
हमें अनाम यूडीटी के बारे में किसी और प्रमाण की आवश्यकता नहीं है, इसलिए हम शुद्ध आभासी फ़ंक्शन खो सकते हैं। इसके अलावा का नाम बदलने instance
के लिए foo
, हम साथ छोड़ रहे हैं:
struct {} foo;
पास आना।
अब, अगर यह अनाम यूडीटी कुछ आधार से प्राप्त होता है तो क्या होगा?
struct bar {}; // base UDT
struct : bar {} foo; // anonymous derived UDT, and instance thereof
अंत में, C ++ 11 ने विस्तारित इनिशियलाइज़र का परिचय दिया , जैसे कि हम इस तरह से भ्रमित करने वाले काम कर सकते हैं:
int x{0};
और इस:
int x{};
और, अंत में, यह:
struct : bar {} foo {};
यह बार से एक अनाम संरचना है, जो एक कोरी इनिशियलाइज़र के साथ foo के रूप में तात्कालिक है।