Here वर्णन किया गया है nullopt_t
और nullopt
optional
वस्तु ग के लिए ++ प्रस्तावित के लिए:प्रयोगात्मक :: वैकल्पिक nullopt_t निर्माता
struct nullopt_t{see below}; constexpr nullopt_t nullopt(unspecified);
[...] प्रकार nullopt_t एक डिफ़ॉल्ट निर्माता नहीं होगा। यह शाब्दिक प्रकार होगा। निरंतर नलोपट को शाब्दिक प्रकार के के साथ प्रारंभ किया जाएगा।
इस का कारण यह दस्तावेज़ के The op = {} syntax अध्याय में समझाया गया है: op = {}
स्पष्ट होने के लिए कुछ चाल अपनाए जाने वाले हैं, जिनमें से एक यह है कि nullopt_t
डिफ़ॉल्ट constructible नहीं होना चाहिए है।
मेरा प्रश्न इस बारे में है कि शाब्दिक प्रकार का अर्थ क्या है? मुझे यह SO post मिला। तो मुझे लगता है कि सिर्फ एक और खाली कक्षा होगी। क्या यह int
लेने वाला एक कन्स्ट्रक्टर भी हो सकता है?
कम से कम nullopt_t
वर्ग की तरह दिखने वाला क्या होगा?
कुछ इस तरह:
struct nullopt_t_construct_tag_t{};
struct nullopt_t {
nullopt_t() = delete; // I know declaring it as deleted is redundant
constexpr nullopt_t(nullopt_t_construct_tag_t) {};
};
constexpr nullopt_t nullopt(nullopt_t_construct_tag_t{});
या इस:
struct nullopt_t {
nullopt_t() = delete;
constexpr nullopt_t(int) {};
};
constexpr nullopt_t nullopt(0);
कार्यान्वयन मुद्दों की गुणवत्ता में इस रन है, जहां एक 'int' एक वैकल्पिक करने के लिए पारित किया जा सका है, और यह एक' nullopt_t' में बदल जाती है और वैकल्पिक निर्माण करने के लिए इस्तेमाल किया, और अप्रत्याशित बातों परिणाम? – Yakk
@Yakk यदि वैकल्पिक का मान प्रकार एक int से बनाया जा सकता है, तो अधिभार संकल्प सुनिश्चित करेगा कि सही कन्स्ट्रक्टर (टेम्पलेट) चुना गया है। यदि नहीं ... तो आप सही हैं। उपरोक्त कन्स्ट्रक्टर को स्पष्ट करना उस समस्या को हल करना चाहिए। – Columbo