Rumah > pembangunan bahagian belakang > C++ > Bolehkah Jenis Tidak Lengkap Dimulakan dalam Bekas Standard?

Bolehkah Jenis Tidak Lengkap Dimulakan dalam Bekas Standard?

Susan Sarandon
Lepaskan: 2024-11-05 22:56:02
asal
838 orang telah melayarinya

Can Incomplete Types Be Instantiated in Standard Containers?

Penyebaran Jenis Tidak Lengkap dalam Bekas Standard

Dalam C , bekas seperti std::vector dan std::map membenarkan instantiasi bekas dengan jenis yang tidak lengkap. Amalan ini biasanya digunakan untuk mencipta struktur rekursif melalui jenis rujukan sendiri. Walau bagaimanapun, piawaian C menimbulkan persoalan sama ada instantiasi sedemikian dibenarkan.

Menurut §17.6.4.8 standard C 11, instantiasi jenis yang tidak lengkap boleh membawa kepada tingkah laku yang tidak ditentukan jika tidak dibenarkan secara eksplisit. Sesetengah bekas, seperti std::vector, berfungsi dengan sewajarnya dengan jenis yang tidak lengkap kerana ia tidak mempunyai ahli jenis_nilai atau fungsi yang berinteraksi dengan objek jenis_nilai mengikut nilai. Walau bagaimanapun, std::map mempamerkan tingkah laku bermasalah dalam hal ini.

Niat standard adalah untuk melarang instantiasi jenis yang tidak lengkap, walaupun pelaksanaan tertentu mungkin tidak menghadapi masalah. Ini disebabkan terutamanya oleh kesukaran pelaksanaan yang berpotensi, seperti mengoptimumkan std::vector untuk bilangan elemen tetap, yang boleh pecah jika struktur rekursif dibenarkan.

Oleh itu, piawaian mewajibkan penggunaan jenis lengkap untuk bekas instansiasi. Walau bagaimanapun, ia mengakui kemungkinan mencipta templat kelas tersuai yang menyokong jenis tidak lengkap secara eksplisit, seperti yang ditunjukkan oleh std::unique_ptr.

Akibatnya, bekas standard tidak boleh digunakan dengan jenis yang tidak lengkap, walaupun ia dibenarkan untuk cipta templat kelas tersuai yang menampung penggunaan sedemikian.

Atas ialah kandungan terperinci Bolehkah Jenis Tidak Lengkap Dimulakan dalam 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