यह permitable इस तरह से डिजाइन करने के लिए std::optional
(वर्तमान में std::experimental::optional
) है भी तुच्छता डिफ़ॉल्ट constructible है, तुच्छता डिफ़ॉल्ट constructible प्रकार T
इसी std::optional<T>
के लिए है?तुच्छता डिफ़ॉल्ट constructible std :: वैकल्पिक और std :: संस्करण
वही प्रश्न std::variant
और इसके अभिन्न भेदभावकर्ता को नियंत्रित करता है।
मेरा स्वयं का जवाब है: "नहीं, इसे इस तरह से डिज़ाइन नहीं किया जा सकता है, क्योंकि डिफ़ॉल्ट प्रारंभिकरण के दौरान प्राप्त अपने अभिन्न भेदभावकर्ता का मूल्य अनिश्चित होगा यदि ऑब्जेक्ट में स्वचालित संग्रहण अवधि हो या यदि यह reinterpret_cast
- गैर- शून्य-प्रारंभिक भंडारण। " उपयोगकर्ता को मूल्य-प्रारंभ करने के लिए हर बार मेरे दिमाग की अनुमति नहीं है।
क्या मैं आपको विनिमय में पूछ सकता हूं कि यह आपके लिए महत्वपूर्ण क्यों है? मैं कल्पना कर सकता हूं कि आप वैकल्पिक रूप से कॉपी करने योग्य क्यों होंगे। लेकिन क्यों मामूली-डिफ़ॉल्ट-रचनात्मक? यह आपको क्या खरीदता है? – Andrzej
@Andrzej कंटेनर (जैसे 'वैकल्पिक' या 'variant') जितना संभव हो उतना सामान्य होना चाहिए, है ना? मैं constexpr के लिए ['variant'] डिजाइन करने का प्रयास करता हूं (http://codereview.stackexchange.com/questions/112218/trivial-full-fledged-variant-for-constexpr-proof-of-concept)। और वर्तमान में यह क्षमता से ऊपर है। लेकिन मुझे लगता है "शायद मुझे इनकार करना चाहिए?"। – Orient
@Andrzej आखिरकार मुझे अपने 'संस्करण' में एक "बग" मिला। डिफ़ॉल्ट प्रारंभिक ऑब्जेक्ट्स में संकलन समय (constexpr) और रनटाइम में अलग-अलग व्यवहार होते हैं। फिर मैंने [intiializations] (http://en.cppreference.com/w/cpp/language/initialization) के बारे में पढ़ा। और पता चला कि स्टैक पर मेरे डिफ़ॉल्ट इंटिअलाइज्ड 'संस्करण' का उपयोग करने के लिए यूबी है। – Orient