क्यों std :: is_pod C ++ 20 में पदावनत है?


92

std::is_podसंभवतः C ++ 20 में पदावनत किया जाएगा।
इस पसंद का कारण क्या है? यह std::is_podजानने के लिए कि एक प्रकार का POD है या नहीं, यह जानने के लिए मुझे क्या उपयोग करना चाहिए ?



3
यदि आप POD टाइप करना चाहते हैं, तो आप क्यों जानना चाहते हैं?
मार्क ग्लिससे

8
@MarcGlisse मानक में परिवर्तन या इस तरह के लक्षण के बारे में एक सवाल जरूरी नहीं है कि मैं उस सुविधा का उपयोग करना चाहता हूं। गोलगप्पे खाते समय मुझे पदावनत नोट मिला और मैं यह जानने के लिए उत्सुक था कि यह पदावनत क्यों हुआ।
स्काइपेजैक

मेरा प्रश्न वास्तव में एक अप्रत्यक्ष उत्तर था: इसे हटा दिया गया क्योंकि (मोटे तौर पर) यह पूछने का कोई कारण नहीं है कि क्या कोई प्रकार POD है।
मार्क ग्लिससे

5
मैं इसका उपयोग यह static_assertसुनिश्चित करने के लिए करूंगा कि कोई भी सी-स्ट्रॉक्स को नहीं छूता है जिसे सी कोड के साथ साझा किया जाना चाहिए।
मिरको

जवाबों:


71

पीओडी को दो श्रेणियों के साथ प्रतिस्थापित किया जा रहा है जो अधिक बारीकियों को देते हैं। नवम्बर 2017 में c ++ मानक बैठक इसके बारे में कहने के लिए यह था:

"सादे पुराने डेटा" (पीओडी) की धारणा को दर्शाते हुए। इसे दो प्रकार की बारीक श्रेणियों के साथ बदल दिया गया है, "तुच्छ" और "मानक-लेआउट"। "POD" "तुच्छ और मानक लेआउट" के बराबर है, लेकिन कई कोड पैटर्न के लिए, "तुच्छ" या सिर्फ "मानक लेआउट" के लिए एक संकीर्ण प्रतिबंध उचित है; इस तरह की सटीकता को प्रोत्साहित करने के लिए, "POD" की धारणा को हटा दिया गया था। लायब्रेरी विशेषता is_pod को भी इसी के साथ हटा दिया गया है।

सामान्य डेटा प्रकारों के लिए is_standard_layoutफ़ंक्शन का उपयोग करते हैं, तुच्छ डेटा प्रकारों के लिए (जैसे सरल संरचनाएं) is_trivialफ़ंक्शन का उपयोग करते हैं।


4
तो, वे remove_cvrefएक तरफ जोड़ते हैं , जो एक रचित लक्षण है, जबकि दूसरी तरफ वे अन्य रचित लक्षणों को हटाते हैं? यह पागलपन लगता है। :-)
स्केपजैक

6
यह तुच्छ और मानक लेआउट लगता है और एक खंड जिसमें पुनरावर्ती पीओडी शामिल है। क्या पुनरावर्ती खंड निरर्थक है? यानी, क्या इसकी गारंटी है std::is_pod<T>{} == (std::is_trivial<T>{} && std::is_standard_layout<T>{})?
यक्क - एडम नेवरामोंट

3
@skypjack: POD को हटाने की बात यह है कि यह अब किसी उद्देश्य की पूर्ति नहीं करता है। "तुच्छ" और "मानक लेआउट" की संरचना का वास्तव में C ++ में कुछ भी मतलब नहीं है, और कोई कारण नहीं है कि आप वास्तव में जो कर रहे हैं उसके आधार पर "तुच्छ" या "मानक लेआउट" के बजाय POD के लिए एक इंटरफ़ेस को प्रतिबंधित करेंगे। इसके साथ। इसके विपरीत, "cvref" को हटाने का अर्थ है; परिणामी प्रकार कोई क्वालिफायर वाला ऑब्जेक्ट प्रकार है।
निकोल बोलस

5
मैं वास्तव में इस बदलाव की सराहना करता हूं। एक सिस्टम सॉफ्टवेयर प्रोग्रामर के रूप में, "मानक लेआउट" वास्तव में मैं सभी के बारे में परवाह करता था, और PODs के लिए आवश्यकताएं जिनके पास कंस्ट्रक्टर नहीं थे, ने उन्हें ठीक से "कॉमनर्स के साथ मेरे कॉम्प्लेक्स" का वर्णन नहीं किया। पहले मुझे उन "छद्म POD" कहने के लिए मजबूर किया गया था। प्यारा, लेकिन यह कुछ एनीमे प्रशंसकों को आप पर अजीब लगता है जब आप अपने कोड में स्यूडोपोड्स होने की बात करते हैं।
TED

2
हैं std::is_pod, std::is_triviaऔर std::is_standard_layoutसंकलन-समय? क्योंकि एल्गोरिदम में, आप मेमरी () आदि का उपयोग करके तेज एल्गोरिथ्म की इच्छा कर सकते हैं यदि सी-लेआउट संगत है।
SJHowe
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.