Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Fungsi Dipadamkan dalam C 11 Mempengaruhi Resolusi Lebihan?

Bagaimanakah Fungsi Dipadamkan dalam C 11 Mempengaruhi Resolusi Lebihan?

Mary-Kate Olsen
Lepaskan: 2024-12-15 15:22:24
asal
375 orang telah melayarinya

How Do Deleted Functions in C  11 Influence Overload Resolution?

Resolusi Lebihan dalam C 11 dengan Fungsi Dipadam

C 11 membenarkan penggunaan sintaks = delete untuk menandakan fungsi sebagai "dipadam. " Sintaks ini menghalang pengkompil daripada menjana badan fungsi dan melarang panggilan langsungnya. Walau bagaimanapun, fungsi yang dipadam ini masih mengambil bahagian dalam resolusi beban lampau, satu proses yang menentukan fungsi yang paling sesuai untuk dipanggil diberikan set parameter input.

Mengapa ciri ini berguna? Mengapakah fungsi yang dipadam disembunyikan dan bukannya dialih keluar sepenuhnya daripada kod?

Sebab utamanya ialah untuk melumpuhkan lebihan beban tertentu berdasarkan jenis parameter. Dengan mengambil bahagian dalam resolusi beban berlebihan, fungsi yang dipadamkan menghalang penukaran tersirat yang boleh membawa kepada tingkah laku yang tidak diingini. Pertimbangkan contoh berikut:

struct onlydouble {
  onlydouble(std::intmax_t) = delete;
  onlydouble(double);
};
Salin selepas log masuk

Jika padam sepenuhnya mengalih keluar fungsi, ia akan menjadikan sintaks = padam bersamaan dengan:

struct onlydouble2 {
  onlydouble2(double);
};
Salin selepas log masuk

Dengan perubahan ini, kod berikut akan menjadi undang-undang:

onlydouble2 val(20);
Salin selepas log masuk

Pengkompil akan cuba secara tersirat menukar integer literal 20 kepada dua kali ganda sebelum menggunakan pembina yang mengambil dua kali ganda.

Sebaliknya, dalam contoh asal dengan pembina yang dipadam, pengkompil akan mengesan padanan tepat antara parameter fungsi (std::intmax_t) dan hujah (20 ). Ia kemudian akan menimbulkan ralat kerana ia telah memilih fungsi yang dipadamkan untuk invocation.

Sintaks = delete, oleh itu, membenarkan kawalan yang lebih kuat ke atas fungsi yang dipanggil berdasarkan jenis parameter. Ia menghalang penukaran tersirat yang boleh mengakibatkan akibat yang tidak diingini.

Selain itu, konsep "ini tidak wujud" tidak diperlukan dalam spesifikasi C kerana:

  • Tatabahasa khas wujud untuk memadam fungsi ("Saya melarang ini")
  • Fungsi yang ditakrifkan secara tersirat (cth., salin pembina) wujud secara lalai
  • Leraian beban lampau mengendalikan fungsi "kewujudan" dengan mengenal pasti ketidakpadanan atau kesamaran
  • Tujuan utama fungsi yang dipadamkan adalah untuk mengawal resolusi beban lampau, bukannya menunjukkan ketiadaan

Atas ialah kandungan terperinci Bagaimanakah Fungsi Dipadamkan dalam C 11 Mempengaruhi 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