Rumah > Artikel > pembangunan bahagian belakang > Mengapakah `nullptr` Pilihan Terbaik untuk Permulaan Penunjuk?
Kelebihan Menggunakan nullptr
Pertimbangkan senario berikut di mana tiga penunjuk dimulakan dengan tujuan konseptual yang sama untuk permulaan penunjuk selamat:
int* p1 = nullptr; int* p2 = NULL; int* p3 = 0;
Sepintas lalu, kaedah yang anda pilih mungkin kelihatan tidak penting. Walau bagaimanapun, kelebihan sebenar nullptr menjadi jelas apabila berurusan dengan fungsi terlampau beban seperti ini:
void f(char const *ptr); void f(int v); f(NULL); // Which function will be called?
Menariknya, fungsi f(int) akan digunakan dan bukannya f(char const *), walaupun terdapat kemungkinan niat . Ini boleh membawa kepada pepijat yang halus dan sukar untuk dikesan.
Penyelesaian terletak pada penggunaan nullptr:
f(nullptr); // Now the first function will be called as expected
Selain itu, nullptr menawarkan faedah tambahan dalam templat. Pertimbangkan perkara berikut:
template<typename T, T *ptr> struct something{}; // Primary template template<> struct something<nullptr_t, nullptr>{}; // Partial specialization for nullptr
Memandangkan nullptr diiktiraf sebagai nullptr_t dalam templat, ia membolehkan penciptaan lebihan beban yang khusus disesuaikan untuk mengendalikan hujah nullptr:
template<typename T> void f(T *ptr); // Function for non-nullptr arguments void f(nullptr_t); // Overload for nullptr arguments
Sebagai kesimpulan, nullptr menawarkan kelebihan ketara berbanding NULL dan 0. Ia menghapuskan potensi kekaburan dalam kelebihan beban fungsi dan membolehkan pengendalian nilai nullptr yang lebih eksplisit dalam templat, meningkatkan keselamatan keseluruhan dan kebolehselenggaraan kod anda.
Atas ialah kandungan terperinci Mengapakah `nullptr` Pilihan Terbaik untuk Permulaan Penunjuk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!