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); };
Jika padam sepenuhnya mengalih keluar fungsi, ia akan menjadikan sintaks = padam bersamaan dengan:
struct onlydouble2 { onlydouble2(double); };
Dengan perubahan ini, kod berikut akan menjadi undang-undang:
onlydouble2 val(20);
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:
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!