Bolehkah Jenis Tidak Lengkap Mempertingkatkan Bekas Standard?
Dalam mengejar struktur data rekursif, pembangun sering menggunakan contoh bekas standard dengan jenis yang tidak lengkap. Walau bagaimanapun, kesahihan binaan sedemikian telah diperdebatkan kerana panduan terhad Standard mengenai penggunaan hujah templat yang tidak lengkap.
Kebimbangan berpunca daripada petikan dalam §17.6.4.8 [lib.res.on.functions], di mana Piawaian melarang jenis tidak lengkap sebagai hujah templat apabila membuat seketika komponen templat, melainkan dibenarkan secara eksplisit untuk komponen itu. Ini menimbulkan persoalan tentang kesahihan konstruk seperti:
<code class="cpp">struct multi_tree_node { std::vector< multi_tree_node & > child; };</code>
Walaupun konstruk sedemikian sering berfungsi dengan lancar dalam amalan, sikap senyap Standard pada jenis instantiasi yang tidak lengkap telah menimbulkan keraguan terhadap kesahihannya.
Walau bagaimanapun, penelitian selanjutnya mendedahkan bahawa sekatan Standard pada jenis yang tidak lengkap terutamanya terpakai kepada "operasi pada jenis...," yang dalam konteks §17.6.4.8, merujuk kepada fungsi. Memandangkan instantiasi bekas tidak melibatkan pelaksanaan sebarang fungsi dalam definisi ahlinya, instantiasi itu sendiri mungkin tidak melanggar larangan Standard.
Tafsiran ini disokong oleh kewujudan std::unique_ptr, yang secara eksplisit membenarkan hujah jenis tidak lengkap walaupun dalam skop blok. Selain itu, rasional Standard di sebalik melarang instantiasi jenis yang tidak lengkap, kerana ia berkaitan dengan pelaksanaan teknik pengoptimuman yang cekap seperti "vektor kecil," tidak boleh digunakan untuk instantiation kontena.
Oleh itu, sementara Standard tidak menggalakkan penggunaan jenis yang tidak lengkap sebagai hujah apabila menginstant komponen templat, kesahihan membuat instantiation bekas standard dengan jenis yang tidak lengkap kekal samar-samar. Walau bagaimanapun, sehingga penjelasan lanjut diberikan oleh Piawaian, adalah dinasihatkan untuk berhati-hati dengan binaan sedemikian.
Atas ialah kandungan terperinci Adakah Jenis Tidak Lengkap Argumen Sah untuk Instantiasi Bekas Standard?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!