क्या एक पीओडी प्रकार एक तुच्छ, मानक-लेआउट प्रकार होने के बराबर है?


22

C ++ 20 में, POD की अवधारणा को हटा दिया गया है, माना जाता है क्योंकि यह तुच्छ और मानक-लेआउट होने का एक अर्थहीन समग्र गुण है। हालाँकि, C ++ 20 ड्राफ्ट में POD की परिभाषा बिल्कुल "तुच्छ और मानक-लेआउट" नहीं है; यह वास्तव में है:

POD वर्ग एक ऐसा वर्ग है जो एक तुच्छ वर्ग और मानक-लेआउट वर्ग दोनों है, और इसमें गैर-POD वर्ग (या सरणी) का कोई गैर-स्थैतिक डेटा सदस्य नहीं है। POD प्रकार एक अदिश प्रकार, एक POD वर्ग, इस प्रकार का एक सरणी या इनमें से किसी एक प्रकार का cv- योग्य संस्करण है।

दूसरे शब्दों में, न केवल एक POD प्रकार दोनों तुच्छ और मानक-लेआउट है, बल्कि यह पुनरावर्ती भी है।

क्या यह पुनरावर्ती आवश्यकता निरर्थक है? दूसरे शब्दों में, यदि एक प्रकार तुच्छ और मानक-लेआउट दोनों है, तो क्या यह स्वचालित रूप से तुच्छ और मानक-लेआउट है? यदि उत्तर "नहीं" है, तो मानक-लेआउट, तुच्छ प्रकार का एक उदाहरण क्या है जो पीओडी होने में विफल रहता है?

जवाबों:


12

C ++ 20 में, POD की अवधारणा को हटा दिया गया है, माना जाता है क्योंकि यह तुच्छ और मानक-लेआउट होने का एक अर्थहीन समग्र गुण है।

गलत। POD शब्द को पदावनत किया जा रहा है क्योंकि यह अब मायने नहीं रखता :

पीओडी शब्द अब मानक में एक उद्देश्य प्रदान नहीं करता है, यह केवल परिभाषित किया गया है, और प्रतिबंध तब लागू होते हैं जब कुछ अन्य प्रकार इस प्रचलित संपत्ति को संरक्षित करते हैं।

अनिवार्य रूप से, एक प्रकार जो दोनों तुच्छ और मानक लेआउट है, जो तुच्छ होने और अपने स्वयं के मानक लेआउट प्रदान करने से परे कोई क्षमता हासिल नहीं करता है। दो का संयोजन प्रकार को विशेष नहीं बनाता है, और दो गुणों का वास्तव में एक दूसरे के साथ बहुत कुछ नहीं है।

मानक लेआउट अपने गैर-खाली सब -जेक्ट्स के लेआउट के बारे में अच्छी तरह से परिभाषित किया जा रहा है (साथ ही इसके खाली बेस क्लास सब -जेक्ट्स प्रकार के लेआउट को परेशान नहीं करते हैं)। तुच्छता इस बारे में है कि क्या वस्तु का बिट्स के ब्लॉक से परे कुछ अर्थ है जिसे वह संग्रहीत करता है (और क्या यह वैचारिक रूप से एक वैध वस्तु है यदि इसे बिट्स के मनमाने ब्लॉक के साथ आरंभीकृत किया गया है)।

यदि मैं एक ऐसा टेम्पलेट बना रहा हूं जो एक प्रकार लेता है T, और मैं यह देखना चाहता हूं कि क्या मैं memcpyउस प्रकार की वस्तुओं को ले सकता हूं, मुझे इसके सदस्यों के लेआउट की परवाह नहीं है; मैं जानना चाहता हूं कि क्या यह त्रिविमचनीय है। इसी तरह, offsetofअगर क्लास में उपयोगकर्ता द्वारा प्रदान की गई कॉपी कंस्ट्रक्टर है, तो इसकी थोड़ी सी भी सावधानी नहीं बरती जाती है। सभी इसकी परवाह करते हैं कि क्या सदस्य उप-विषय का लेआउट स्पष्ट, मानक-लागू क्रम में होता है।

मूल रूप से, लोगों ने चारों ओर देखा और महसूस किया कि C ++ में कुछ भी नहीं बचा है जो विशेष रूप से तुच्छता और मानक लेआउट के प्रतिच्छेदन की आवश्यकता है । इसलिए हमें इसके लिए कोई शब्द आरक्षित करने की आवश्यकता नहीं है। उन कुछ स्थानों पर जहां मानक स्पष्ट रूप से बताता है कि कुछ प्रकार "POD" होगा, बस उपयुक्त रूप में "तुच्छ और मानक लेआउट" द्वारा प्रतिस्थापित किया जा सकता है।

क्या यह पुनरावर्ती आवश्यकता निरर्थक है?

चूंकि दोनों घटक आवश्यकताएं व्यक्तिगत रूप से पुनरावर्ती हैं, इसलिए दोनों का प्रतिच्छेदन पुनरावर्ती भी है। इसलिए यह स्पष्ट करने की कोई आवश्यकता नहीं है कि सभी सबोबिज भी POD हैं। यह केवल कॉपी-एंड-पेस्ट विषमता के एक मामले की तुलना में अधिक था, जहां मूल परिभाषा ने कहा कि "सभी गैर-स्थैतिक डेटा सदस्यों को POD प्रकार होना चाहिए" और उन्होंने बस उस कथन को यथावत रखा।


" सभी इसकी परवाह करते हैं कि क्या सदस्य उप-विषय का लेआउट एक स्पष्ट, मानक-लागू आदेश में होता है " किसी सदस्य की ऑफसेट को निर्धारित करने में सक्षम होने के लिए एसटीडी को एक आदेश क्यों लागू करना होगा? क्या यह सदस्यों को एक ऑफसेट नहीं है, जहां पागल प्रत्यारोपण की अनुमति देने के लिए एसटीडी का एक लक्ष्य है?
जिज्ञासु

1

मानक लेआउट गैर-स्थिर सदस्यों के मानक लेआउट पर निर्भर करता है:

[Class.prop]

एक वर्ग S एक मानक-लेआउट वर्ग है यदि वह:

  • गैर-मानक-लेआउट वर्ग (या इस प्रकार के सरणी) या संदर्भ के प्रकार का कोई गैर-स्थैतिक डेटा सदस्य नहीं है,

  • ...

तिर्यकत्व गैर-स्थैतिक सदस्यों की तुच्छता पर भी निर्भर करता है। संक्षिप्तता के लिए, मैंने केवल डिफ़ॉल्ट कंस्ट्रक्टर के लिए नियम उद्धृत किया है, लेकिन अन्य विशेष सदस्य फ़ंक्शंस के समान शब्द हैं:

[Class.default.ctor]

एक डिफ़ॉल्ट निर्माण तुच्छ है यदि यह उपयोगकर्ता द्वारा प्रदान नहीं किया गया है और यदि:

  • ...
  • अपने वर्ग के सभी गैर-स्थैतिक डेटा सदस्यों के लिए जो वर्ग प्रकार (या सरणी) से हैं, ऐसे प्रत्येक वर्ग में एक तुच्छ विध्वंसक होता है।

जहाँ तक मैं बता सकता हूँ, सदस्यों को लागू करने के लिए PODness की स्पष्ट आवश्यकता निरर्थक है, क्योंकि यह मानक लेआउट और तुच्छ होने की आवश्यकताओं से भी निहित है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.