दिलचस्प पोस्ट
जावा में एक अद्वितीय कंप्यूटर पहचानकर्ता कैसे प्राप्त करें (जैसे डिस्क आईडी या मदरबोर्ड आईडी) MySql में एक अनुवंश संवेदनशील खोज कैसे संचालित करें I लॉगिन मैक पर स्क्रिप्ट चलाना $ http.get को एक्सेस-कंट्रोल-अनुमति-मूल द्वारा अनुमति नहीं है लेकिन $। एजेक्स है एक .net फ़नक <T> को एक शुद्ध अभिव्यक्ति में परिवर्तित करना <Func <T >> अमेज़ॅन एस 3 में एक बाल्टी को सार्वजनिक करें क्या प्रमुख एसक्यूएल डाटाबेस में वापस बनाने के लिए संभव है? नोडजेएस एक्सप्रेस में मार्ग मैपिंग निकालें हमें बॉडी और यूआरआई से निर्दिष्ट क्यों करना है? क्या आप को.एपली कॉल कर सकते हैं आंशिक दृश्य को बाइंडिंग करने के लिए? सत्र के बीच अंतर क्या है। मेर्ज और सत्र। सहेजें ऑरअपडेट? Bootstrap Datepicker में चयन योग्य दिनांक सीमा को कैसे सीमित करें? उद्देश्य-सी में एक वर्ग के लिए निजी तरीकों को परिभाषित करने का सर्वोत्तम तरीका Asp.net MVC4: दोनों नियंत्रक और कार्रवाई पर प्राधिकृत Android WebView में ज़ूम सक्षम / सक्षम करें

रिक्त कोष्ठ के साथ डिफ़ॉल्ट निर्माता

क्या कोई अच्छा कारण है कि सीएआर में डिफ़ॉल्ट कन्स्ट्रक्टर को कॉल करने के लिए राउंड ब्रैकेट्स (कोष्ठकों) का एक खाली सेट मान्य नहीं है?

MyObject object; // ok - default ctor MyObject object(blah); // ok MyObject object(); // error 

मुझे लगता है कि "()" स्वचालित रूप से हर समय टाइप करने लगता है क्या इसका कोई उचित कारण नहीं है?

वेब के समाधान से एकत्रित समाधान "रिक्त कोष्ठ के साथ डिफ़ॉल्ट निर्माता"

सबसे सफ़ेद पर्स

यह "सी ++ का सबसे सफ़ेद पर्स" के रूप में जाना जाता है। मूल रूप से, कुछ भी जो संकलक द्वारा एक घोषणा के रूप में व्याख्या किया जा सकता है, उसे घोषणा के रूप में व्याख्या किया जाएगा

एक ही समस्या का एक अन्य उदाहरण:

 std::ifstream ifs("file.txt"); std::vector<T> v(std::istream_iterator<T>(ifs), std::istream_iterator<T>()); 

v को 2 पैरामीटर के साथ कार्य की घोषणा के रूप में व्याख्या किया गया है

वर्कअराउंड एक दूसरे जोड़ी के कोष्ठकों को जोड़ना है:

 std::vector<T> v((std::istream_iterator<T>(ifs)), std::istream_iterator<T>()); 

या, यदि आपके पास सी +11 और लिस्ट-इनिशियलाइज़ेशन (वर्दी आरंभीकरण के रूप में भी जाना जाता है) उपलब्ध है:

 std::vector<T> v{std::istream_iterator<T>{ifs}, std::istream_iterator<T>{}}; 

इसके साथ, ऐसा कोई तरीका नहीं है जिसे एक फ़ंक्शन घोषणा के रूप में समझा जा सकता है।

क्योंकि यह फ़ंक्शन के लिए घोषणा के रूप में माना जाता है:

 int MyFunction(); // clearly a function MyObject object(); // also a function declaration 

फ़ंक्शन घोषणा के लिए एक ही वाक्यविन्यास का उपयोग किया जाता है – फ़ंक्शन object , कोई पैरामीटर नहीं ले रहा है और MyObject लौट रहा है

क्योंकि कंपाइलर सोचता है कि यह फ़ंक्शन की घोषणा है जो कोई तर्क नहीं लेता है और एक MyObject उदाहरण देता है।

आप निर्माण के अधिक क्रियाशील तरीके का भी उपयोग कर सकते हैं:

 MyObject object1 = MyObject(); MyObject object2 = MyObject(object1); 

सी ++ 0x में यह auto : भी अनुमति देता है:

 auto object1 = MyObject(); auto object2 = MyObject(object1); 

मुझे लगता है, संकलक पता नहीं होगा कि यह कथन:

MyObject ऑब्जेक्ट ();

एक कन्स्ट्रक्टर कॉल या एक फ़ंक्शन प्रोटोटाइप है, जिसका नाम ऑब्जेक्ट नामित फ़ंक्शन को रिवर्स टाइप मायऑबैक्ट और कोई पैरामीटर नहीं है।

जैसा कि कई बार बताया गया है, यह एक घोषणा है। यह पिछड़े संगतता के लिए यही तरीका है सी ++ के कई क्षेत्रों में से एक है जो इसके विरासत के कारण नासमझ / असंगत / दर्दनाक / फर्जी है।

N4296 से [dcl.init]:

[ ध्यान दें:
चूंकि () आरंभीकरण के लिए वाक्यविन्यास द्वारा अनुमति नहीं है , X a(); वर्ग X के एक ऑब्जेक्ट की घोषणा नहीं है, लेकिन किसी फ़ंक्शन को कोई तर्क नहीं लेते हुए और एक्स वापस करने की घोषणा नहीं है। कुछ अन्य प्रारंभिक संदर्भ (5.3.4, 5.2.3, 12.6.2) में फ़ॉर्म () की अनुमति है।
-नोट नोट]

जैसा कि दूसरों ने कहा, यह एक फ़ंक्शन घोषणा है। सी ++ 11 के बाद से आप ब्रेस इनिशियलाइजेशन का उपयोग कर सकते हैं, अगर आपको खाली चीज़ देखने की आवश्यकता है जो स्पष्ट रूप से आपको बताती है कि एक डिफॉल्ट कन्स्ट्रक्टर का उपयोग किया जाता है।

 Jedi luke{}; //default constructor