Adakah Jenis Tidak Lengkap Argumen Sah untuk Instantiasi Bekas Standard?

Barbara Streisand
Lepaskan: 2024-11-05 07:19:02
asal
522 orang telah melayarinya

Are Incomplete Types Legitimate Arguments for Standard Container Instantiation?

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!