Dalam C ++ 20, konsep POD sudah usang, konon karena itu adalah sifat komposit yang tidak berarti menjadi sepele dan tata letak standar.
Salah. Istilah POD sedang tidak digunakan lagi karena tidak lagi penting :
Istilah POD tidak lagi memenuhi tujuan dalam standar, itu hanya didefinisikan, dan pembatasan berlaku ketika beberapa jenis lain mempertahankan properti peninggalan ini.
Pada dasarnya, tipe yang sepele dan tata letak standar tidak mendapatkan kemampuan apa pun di luar apa yang menjadi sepele dan tata letak standar menyediakan sendiri. Kombinasi keduanya tidak membuat tipe tersebut spesial, dan kedua properti tersebut tidak terlalu berhubungan satu sama lain.
Tata letak standar adalah tentang tata letak sub-objek non-kosongnya yang terdefinisi dengan baik (serta sub-objek kelas dasar kosong yang tidak mengganggu tata letak jenis ini). Triviality adalah tentang apakah objek memiliki makna di luar blok bit yang disimpannya (dan apakah objek tersebut secara konsep merupakan objek yang valid jika diinisialisasi dengan blok bit yang arbitrer).
Jika saya membuat template yang menggunakan tipe T
, dan saya ingin melihat apakah saya bisa memcpy
objek dari tipe itu, saya tidak peduli dengan tata letak anggotanya; Saya ingin tahu apakah itu TriviallyCopyable. Demikian pula, kebenaran offsetof
tidak peduli sedikit pun jika kelas memiliki copy constructor yang disediakan pengguna. Yang perlu diperhatikan adalah jika tata letak sub-objek anggota terjadi dalam urutan yang jelas dan diberlakukan standar.
Pada dasarnya, orang-orang melihat sekeliling dan menyadari bahwa tidak ada yang tersisa di C ++ yang secara khusus membutuhkan persimpangan dari hal-hal sepele dan tata letak standar. Jadi kita tidak perlu memesan istilah untuk itu. Beberapa tempat di mana standar menyatakan secara tegas bahwa beberapa jenis akan "POD" dapat dengan mudah digantikan oleh "tata letak sepele dan standar", yang sesuai.
Apakah persyaratan rekursif ini berlebihan?
Karena kedua persyaratan konstituen tersebut bersifat rekursif secara individual, persimpangan keduanya juga bersifat rekursif. Jadi tidak ada kebutuhan eksplisit untuk menyatakan bahwa semua sub-proyek juga POD. Ini lebih dari kemungkinan hanya kasus keanehan copy-and-paste, di mana definisi asli mengatakan sesuatu seperti "semua anggota data non-statis harus tipe POD" dan mereka hanya menjaga pernyataan itu sebagaimana adanya.
Tata letak standar tergantung pada tata letak standar anggota non-statis:
Triviality juga tergantung pada triviality anggota non-statis. Untuk keringkasan, saya hanya mengutip aturan untuk konstruktor default, tetapi fungsi anggota khusus lainnya memiliki kata-kata yang serupa:
Sejauh yang saya tahu, persyaratan eksplisit dari PODness untuk diterapkan pada anggota adalah mubazir, karena persyaratan tersebut juga secara implisit mengikuti dari persyaratan tata letak standar dan sepele.
sumber