Rumah >pembangunan bahagian belakang >C++ >Mengapa Fungsi C 11 yang Dipadam Masih Mengambil bahagian dalam Resolusi Lebihan?
Mengapa Resolusi Terlebih Beban Termasuk Fungsi C 11-Dipadam
C 11 memperkenalkan sintaks = delete, yang menandakan fungsi sebagai "dipadamkan", menghalang seruan mereka. Ini menimbulkan persoalan mengapa fungsi ini masih mengambil bahagian dalam resolusi beban lampau dan bukannya dihapuskan sepenuhnya.
Tujuan utama = padam adalah untuk menghalang penggunaan fungsi tertentu dengan parameter tertentu. Ia bertujuan untuk melarang penukaran tersirat, terutamanya dalam senario yang boleh membawa kepada akibat yang tidak diingini. Oleh itu, penyertaan dalam resolusi beban lampau adalah penting untuk = padam untuk melarang lebihan beban tertentu dengan berkesan.
Pertimbangkan contoh berikut:
struct onlydouble { onlydouble(std::intmax_t) = delete; onlydouble(double); };
Jika = padam dialih keluar sepenuhnya fungsi, ia akan mempunyai fungsi yang sama kesan seperti ini:
struct onlydouble2 { onlydouble2(double); };
Dalam kes ini, kod berikut ialah sah:
onlydouble2 val(20);
Pengkompil akan cuba memanggil pembina yang mengambil integer, tetapi secara tersirat akan menukar 20 kepada double dan berjaya memanggil pembina yang mengambil double.
Walau bagaimanapun, dengan = padam, seruan pembina onlydouble yang mengambil intmax_t adalah dilarang secara jelas. Pengkompil tidak akan mencuba penukaran tersirat dan sebaliknya akan mengeluarkan ralat, menghalang penggunaan beban terlarang ini.
Selain itu, = padam membayangkan "Saya melarang ini" dan bukannya "ini tidak wujud." Spesifikasi C tidak mentakrifkan konsep fungsi "tidak wujud". Sebaliknya, ia menyediakan mekanisme untuk secara jelas melarang seruan tertentu, membenarkan pengaturcara mengawal gelagat pengkompil dan menghalang penukaran tersirat yang tidak diingini.
Atas ialah kandungan terperinci Mengapa Fungsi C 11 yang Dipadam Masih Mengambil bahagian dalam Resolusi Lebihan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!