Rumah >pembangunan bahagian belakang >C++ >Mengapa Fungsi C 11 Dipadam Masih Mengambil bahagian dalam Resolusi Lebihan?
Mengapa Fungsi C 11-Dipadam Mengambil bahagian dalam Resolusi Lebihan Beban
C 11 memperkenalkan sintaks = padam untuk mengelakkan pemanggilan lebihan fungsi tertentu dengan jenis parameter tertentu. Tingkah laku ini mungkin kelihatan luar biasa, kerana seseorang mungkin menjangkakan fungsi yang dipadam akan dialih keluar sepenuhnya daripada pertimbangan semasa resolusi beban lampau. Walau bagaimanapun, terdapat sebab khusus untuk keputusan reka bentuk ini.
Mencegah Penukaran Tersirat
Satu tujuan utama = memadam adalah untuk melarang penggunaan penukaran tersirat dalam senario tertentu. Apabila fungsi dengan lebihan terpadam mengambil bahagian dalam resolusi beban lampau, ia memastikan bahawa pengkompil akan memilih padanan tepat atau melaporkan ralat. Ini menghalang penggunaan penukaran tersirat untuk secara tidak sengaja memanggil lebihan yang dipadamkan.
Pertimbangkan contoh di bawah:
struct onlydouble { onlydouble(std::intmax_t) = delete; // Prevent implicit conversion from integer onlydouble(double); };
Jika lebihan yang dipadamkan telah dialih keluar sepenuhnya daripada pertimbangan, kod berikut akan dibenarkan :
onlydouble val(20);
Pengkompil secara tersirat akan menukar literal integer kepada dua kali ganda dan pilih lebihan yang tidak dipadamkan. Walau bagaimanapun, dengan lebihan beban yang dipadamkan mengambil bahagian dalam resolusi lebihan beban, pengkompil menolak kod kerana ia mengenal pasti lebihan yang dipadamkan sebagai padanan tepat untuk hujah literal integer.
Sintaks Khas lwn. "Ini Tidak Wujud"
Seseorang mungkin mempersoalkan mengapa C 11 mentakrifkan = padam sebagai "Saya melarang ini" dan bukannya "ini tidak wujud." Jawapannya terletak pada kekurangan keperluan tatabahasa eksplisit untuk mewakili ketiadaan. Pengecam yang tidak ditentukan dan fungsi ahli khas yang hilang secara tersirat menyampaikan konsep "ini tidak wujud."
Kesimpulan
Fungsi C 11-dipadam mengambil bahagian dalam resolusi beban berlebihan untuk mengelakkan tersirat penukaran dan menguatkuasakan penggunaan jenis parameter tertentu. Ciri reka bentuk ini membolehkan kawalan tepat ke atas penggunaan lebihan fungsi, menawarkan kelebihan dalam senario di mana penukaran tersirat tidak diingini atau membawa kepada kekaburan.
Atas ialah kandungan terperinci Mengapa Fungsi C 11 Dipadam Masih Mengambil bahagian dalam Resolusi Lebihan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!