सी ++ 11 में हमारे पास ऑब्जेक्ट्स के लिए अच्छा वर्दी प्रारंभिक वाक्यविन्यास है। गैर-ऑब्जेक्ट प्रकारों को प्रारंभ करने के लिए यह क्यों विस्तारित नहीं होता है?क्यों समान प्रारंभिक वाक्यविन्यास केवल वस्तुओं के लिए लागू किया जाता है?
क्या इसके लिए कोई वाक्य रचनात्मक अस्पष्टता है, या क्या यह सिर्फ कुछ बेवकूफ सवाल है जो मैं पूछ रहा हूं?
उदाहरण:
struct s{ int k;};
s s1{1}; //ok (object initialization)
s const& s3{3}; //ok (object initialization)
s& s2{s1}; //error (reference initialization)
एक अधिक उपयोगी उदाहरण:
struct t{ t(t const& x) : k(x.k){} int k;};
struct c
{
c(t& x1,t& x2)
: s1_{x1} //error (reference initialization)
, s2_{x2} //ok (object initialization)
{}
t& s1_;
t s2_;
};
एक और एक:
template<class T>
T get()
{
return T{};
}
//ok (object initialization)
get<int>();
//error (void initialization? I do not know terminology for void() token equivalent)
get<void>();
मेरा अनुमान है कि भाषा के डिजाइनरों ने फैसला किया कि मौजूदा 's1_ (x1)' वाक्यविन्यास काफी पर्याप्त है। – dasblinkenlight
@dasblinkenlight यह स्पष्ट रूप से नहीं है (एमवीपी पर विचार करें)। –
आपका अंतिम उदाहरण अवैध है। 'शून्य 'एक अधूरा वस्तु प्रकार है; 'void' प्रकार की वस्तुओं को बनाने का कोई तरीका नहीं है। – Angew