Rumah > pembangunan bahagian belakang > C++ > Mengapa Fungsi Dipadamkan dalam C 11 Mengambil bahagian dalam Resolusi Lebihan?

Mengapa Fungsi Dipadamkan dalam C 11 Mengambil bahagian dalam Resolusi Lebihan?

Linda Hamilton
Lepaskan: 2024-12-15 12:36:10
asal
125 orang telah melayarinya

Why Do Deleted Functions in C  11 Participate in Overload Resolution?

Mengapa Fungsi yang Dipadam Mengambil bahagian dalam Resolusi Lebihan Beban dalam C 11

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

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

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!

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