2013-06-11 8 views
9

सी ++ 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>(); 
+0

मेरा अनुमान है कि भाषा के डिजाइनरों ने फैसला किया कि मौजूदा 's1_ (x1)' वाक्यविन्यास काफी पर्याप्त है। – dasblinkenlight

+0

@dasblinkenlight यह स्पष्ट रूप से नहीं है (एमवीपी पर विचार करें)। –

+0

आपका अंतिम उदाहरण अवैध है। 'शून्य 'एक अधूरा वस्तु प्रकार है; 'void' प्रकार की वस्तुओं को बनाने का कोई तरीका नहीं है। – Angew

उत्तर

0

सी ++ के प्रारंभ नियम काफी जटिल हैं। वे मानक के अध्याय (खंड) 8 के दूसरे भाग में वर्णित हैं। शून्य-प्रारंभिकरण, प्रत्यक्ष-प्रारंभिकरण, मूल्य-प्रारंभिकरण, प्रति-प्रारंभिकरण, सूची-प्रारंभिकता केवल कुछ नामों के लिए है, और प्रत्येक के संदर्भ (घोषणा, पैरामीटर, रिटर्न, फेंक, सदस्य प्रारंभकर्ता इत्यादि) के आधार पर अलग-अलग इंटरैक्शन हो सकते हैं।), बाध्य होने के लिए प्रकार के गुण और इनपुट प्रारंभिक अभिव्यक्ति या ब्रेस्ड-इनिट-सूची। भाषा डिजाइनर इसे सी ++ के सी और पुराने संस्करणों के साथ लगभग पिछड़ा संगत होने का लक्ष्य भी बनाते हैं, जो प्रतिबंधित करता है कि वे क्या कर सकते हैं। शुरुआती नियमों में बदलावों की विधियों पर अनुमान लगाने के लिए काफी कुछ अध्ययन किया जाता है, और परिवर्तन कई अनजान कोने के मामलों को उत्पन्न कर सकते हैं। यदि आप रुचि रखते हैं तो मैं आपको मानक का अध्ययन करने के लिए प्रोत्साहित करता हूं और आपके द्वारा डिज़ाइन किए गए प्रस्तावित परिवर्तन के प्रभावों के माध्यम से काम करने का प्रयास करता हूं।

संबंधित मुद्दे

 संबंधित मुद्दे