Soalan:
Mengapa fungsi dengan parameter jenis const char* diutamakan daripada templat fungsi dengan parameter jenis const char (&s)[N] apabila kedua-duanya adalah sama terpakai?
Punca Punca:
Kekaburan berpunca daripada kos relatif penukaran. Peleraian beban lampau mengutamakan fungsi yang memerlukan kurang operasi penukaran. Tatasusunan secara berkesan adalah penunjuk kepada elemen pertamanya, membayangkan bahawa kos penukaran tatasusunan ke penuding kurang daripada mengisytiharkan templat fungsi berasaskan tatasusunan.
Penjelasan Standard:
Mengikut standard C ([over.match.best]/(1.3), (1.6)):
Dalam kes ini:
Mungkin Penyelesaian:
Untuk mengutamakan fungsi berasaskan templat, tentukan terlebih beban kedua sebagai templat fungsi juga:
template <typename T> auto foo(T s) -> std::enable_if_t<std::is_convertible<T, char const*>{}> { std::cout << "raw, size=" << std::strlen(s) << std::endl; }
Penyusunan separa ini memastikan fungsi berasaskan templat adalah dipilih apabila berkenaan.
Atas ialah kandungan terperinci Mengapakah Fungsi `const char*` Lebih Beban Diutamakan Melebihi Fungsi Templat `const char (&)[N]`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!