Mengapa C Melarang Templat dengan Jenis Tidak Lengkap?
Bekas C, seperti yang terdapat dalam Perpustakaan Standard C, tidak membenarkan jenis yang tidak lengkap sebagai parameter templat. Sekatan ini timbul daripada sebab sejarah.
Rasional Sejarah
Pada mulanya, adalah dianggap bahawa bekas boleh menyokong jenis yang tidak lengkap. Walau bagaimanapun, ujian mendedahkan ketidakkonsistenan merentas pelaksanaan STL. Oleh itu, jawatankuasa penyeragaman mengisytiharkan kelakuan tidak ditentukan untuk kontena STL berfungsi dengan jenis yang tidak lengkap, memperluaskan larangan ini kepada keseluruhan perpustakaan standard.
Keputusan ini bertujuan untuk mengelakkan pembatalan pelaksanaan perpustakaan sedia ada dengan memaksa mereka menyokong jenis yang tidak lengkap secara retroaktif.
Memahami Larangan
Kebimbangan jawatankuasa berpunca daripada potensi tingkah laku yang tidak ditentukan dan keperluan untuk mengekalkan keserasian ke belakang. Jenis templat yang tidak lengkap menimbulkan ketidakpastian mengenai pengurusan memori dan kestabilan kod.
Pertimbangan Masa Depan
Walaupun larangan semasa, Matt Austern, ketua kumpulan kerja perpustakaan C, meramalkan bahawa semakan C masa hadapan mungkin melonggarkan sekatan pada jenis yang tidak lengkap. Ini boleh mencerminkan peralihan beransur-ansur ke arah peningkatan sokongan untuk jenis yang tidak lengkap, seperti yang dinyatakan dalam piawaian C 17 untuk bekas tertentu.
Pendekatan Alternatif
Disebabkan larangan standard yang berterusan , pereka perpustakaan Boost memilih untuk mencipta bekas mereka sendiri yang membenarkan jenis yang tidak lengkap. Pendekatan ini mengelakkan pengehadan yang dikenakan oleh perpustakaan standard dan membolehkan struktur data yang lebih fleksibel.
Atas ialah kandungan terperinci Mengapa Templat C Tidak Boleh Menggunakan Jenis Tidak Lengkap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!