2016-12-27 13 views
7

के बाद काम करता है ठीक उसी वर्ग दायरे के भीतर विफल रहता है?क्यों is_default_constructible <Class> :: मूल्य


साइड Qn: std::is_default_constructibleprivate कंस्ट्रक्टर्स के साथ कक्षाओं के लिए असफल करने की अपेक्षा की जाती है जैसे में चर्चा:
std::is_default_constructible<T> error, if constructor is private

उत्तर

11

documentation page का कहना है कि std::is_default_constructible<T> के लिए:

टी होगा एक पूर्ण प्रकार, (संभवतः सीवी-योग्य) शून्य, या अज्ञात बाध्य की सरणी। अन्यथा, व्यवहार अपरिभाषित है।

चूंकि आप अपनी कक्षा में हैं, इसलिए अभी तक पूरी तरह से परिभाषित नहीं किया गया है, मुझे लगता है कि अंतर का कारण है।


पक्ष प्रश्न का सवाल है, इस विशेषता जिसका अर्थ है कि यदि चर परिभाषा

T obj(); 

है well formed सदस्य लगातार value बराबर true करने लगता है std::is_constructible के आधार पर किया जा रहा है। अन्य सभी मामलों में, valuefalse है।

तो मेरी और मेरी स्पष्ट नाम आधारित अर्थात् वृत्ति की मेरी समझ यह कहती है कि डिफ़ॉल्ट कन्स्ट्रक्टर निजी होने पर यह विफल होना चाहिए।

+0

इस स्थिति के लिए कामकाज उस वर्ग के कुछ सदस्य विधि के अंदर इस 'static_assert' को घेरना है। क्या मानक से कोई संदर्भ भी है? बीटीडब्लू, * अज्ञात बाध्य * * का अर्थ क्या है? - आप पूर्णता के लिए "साइड क्यूएन" पर भी प्रतिक्रिया दे सकते हैं। – iammilind

+0

@iammilind साइड प्रश्न उत्तर के साथ अपडेट किया गया है, अज्ञात बाध्य की एक सरणी भी है जब आप ब्रैकेट्स -> 'char array [];' के बीच कोई संख्या नहीं डालते हैं। अधिकांश समय cppreference मानक उद्धरण/rephrase, लेकिन हाँ, आपको हमेशा सुरक्षा के लिए मूल स्रोत की जांच करनी चाहिए, हालांकि मेरे पास अभी इसकी एक सुलभ प्रति नहीं है। – Drax

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