Dalam C 11, fungsi yang dipadamkan tidak dipadamkan sepenuhnya tetapi sebaliknya mengambil bahagian dalam resolusi lebihan beban. Ciri ini mempunyai dua tujuan utama.
Mencegah Penukaran Tersirat
Separuh daripada utiliti sintaks "= delete" terletak pada melarang pemanggil daripada menggunakan fungsi tertentu dengan parameter tertentu jenis. Matlamatnya adalah untuk menghalang penukaran tersirat di bawah senario tertentu. Agar lebihan beban tertentu tidak dibenarkan, ia mesti mengambil bahagian dalam resolusi lebihan beban.
Memastikan Seruan Eksplisit
Jika sintaks "= padam" akan memadamkan fungsi sepenuhnya, ia pada asasnya akan menjadikannya setara dengan meninggalkan pengisytiharan itu sama sekali. Ini akan membenarkan senario seperti:
onlydouble val(20); // Legal in C++
Pengkompil akan mempertimbangkan semua pembina dan mengenal pasti penukaran tersirat yang membolehkannya memanggil pembina yang dimaksudkan untuk parameter berganda.
Sebaliknya, dengan "= padam" mengambil bahagian dalam resolusi beban lampau:
onlydouble val(20); // Error in C++
Pengkompil menilai semua pembina, termasuk dipadamkan satu. Ia menemui padanan tepat untuk integer literal dan melemparkan ralat kerana ia cuba menggunakan fungsi yang dipadamkan.
Menjelaskan Peranan "= delete"
The " = delete" sintaks menandakan "Saya melarang ini," bukan semata-mata "ini tidak wujud." Ia adalah pernyataan yang lebih kuat dengan implikasi khusus. Kami tidak memerlukan sintaks yang berbeza untuk "ini tidak wujud" kerana ia sudah tersirat dengan meninggalkan pengisytiharan.
Dalam kes yang jarang berlaku, kekaburan peraturan tertentu boleh timbul kerana ketiadaan cara yang jelas untuk menunjukkan bahawa pembina salinan tidak wujud. Walau bagaimanapun, pembina khas seperti pembina salinan adalah wujud kepada kelas. Daripada menunjukkan ketiadaannya, kebimbangan terletak pada sama ada ia sah untuk memohonnya.
Kesimpulan
Fungsi yang dipadamkan dalam C 11 mengambil bahagian dalam resolusi beban berlebihan untuk memudahkan jelas pelaporan ralat dan menguatkuasakan seruan fungsi eksplisit. Ini membolehkan pembangun menghalang penukaran yang tidak jelas dan tidak diingini, memastikan ketepatan dan kejelasan program.
Atas ialah kandungan terperinci Mengapa Fungsi Dipadamkan dalam C 11 Mengambil bahagian dalam Resolusi Lebihan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!