बूस्ट लाइब्रेरी, और ऐसा लगता है कि आगामी सी ++ 0x मानक, विभिन्न प्रकार के गुण टेम्पलेट्स को परिभाषित करता है, जो छोटे कन्स्ट्रक्टर, प्रतिलिपि बनाने वाले, असाइनमेंट या विनाशकों के बीच अंतर करने के लिए परिभाषित करते हैं, जो कि ' टी। इसका सबसे महत्वपूर्ण उपयोग कुछ प्रकारों के लिए एल्गोरिदम अनुकूलित करना है, उदा। memcpy का उपयोग करके।सी ++: has_trivial_X प्रकार के लक्षण
लेकिन, मैं सभी विभिन्न has_trivial_X टेम्पलेट्स के बीच वास्तविक व्यावहारिक अंतर को समझ नहीं पा रहा हूं। सी ++ मानक केवल दो व्यापक श्रेणियों को परिभाषित करता है जो हमें यहां चिंता करते हैं: पीओडी और गैर-पीओडी। एक प्रकार गैर-पीओडी है यदि इसमें एक परिभाषित कन्स्ट्रक्टर है, प्रतिलिपि निर्माता, असाइनमेंट ऑपरेटर, या विनाशक है। दूसरे शब्दों में, कुछ भी जो अंतर्निहित प्रकार नहीं है, या अंतर्निहित प्रकारों की सी-स्ट्रक्चर, पीओडी नहीं है।
तो उदाहरण के लिए अलग-अलग होने का क्या मतलब है, उदाहरण के लिए, है_ट्रिविअल_एसिन और है_ट्रिविअल_कॉनस्ट्रक्टर? यदि किसी ऑब्जेक्ट में एक गैर-तुच्छ असाइनमेंट ऑपरेटर या गैर-तुच्छ कन्स्ट्रक्टर होता है तो यह एक पीओडी नहीं है। तो किस परिस्थिति में यह जानना उपयोगी होगा कि किसी ऑब्जेक्ट में एक छोटा असाइनमेंट ऑपरेटर है, लेकिन एक गैर-तुच्छ कन्स्ट्रक्टर है?
दूसरे शब्दों में, एक प्रकार के लक्षण टेम्पलेट को परिभाषित क्यों न करें, is_pod<T>
, और इसके साथ किया जाए?