दिलचस्प पोस्ट
कैसे जांचें कि क्या किसी गतिविधि से कुछ गतिविधि को नियंत्रित किया जा सकता है? सरल VBA कोड मुझे समय त्रुटि चलाने के लिए देता है 91 वस्तु चर या ब्लॉक सेट के साथ नहीं दो नक्शे मर्ज करने और एक ही कुंजी के मूल्यों का योग करने का सर्वोत्तम तरीका है? आईओएस एप से सफारी और ओपन यूआरएल कैसे लॉन्च करें छवि को कर्सर में क्रोम में संगत बनाने में ड्रॉप करें एक शब्दकोश में पुनरावर्ती कुंजी खोजना क्यों strcpy का यह जानबूझकर गलत उपयोग नाकामी विफल नहीं है? कैसे त्रुटि को संबोधित करने के लिए "bash:! d ': घटना नहीं मिला" बैश कमांड प्रतिस्थापन find_or_create के साथ स्वीकार करता है? जावा में डेटा एक्सेस ऑब्जेक्ट (डीएओ) वेबपैक के साथ वास्तविक विंडो ऑब्जेक्ट के लिए jQuery को खोलें सप्ताह, महीनों, तिमाहियों और वर्षों के संदर्भ में तिथियों के बीच का अंतर प्राप्त करें पीएचपी – वस्तुओं की सरणी से ऑब्जेक्ट प्रॉपर्टी से प्रविष्टि ढूंढें कक्षा एक कच्चा प्रकार है जेनेरिक प्रकार के संदर्भ वर्ग <टी> पैरामीटर होना चाहिए आवेदन सही तरीके से शुरू करने में असमर्थ था (0xc000007b)

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

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

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