Rumah > pembangunan bahagian belakang > C++ > Mengapakah `nullptr` Pilihan yang Lebih Baik daripada `NULL` dan `0` untuk Penunjuk dalam C ?

Mengapakah `nullptr` Pilihan yang Lebih Baik daripada `NULL` dan `0` untuk Penunjuk dalam C ?

Linda Hamilton
Lepaskan: 2024-11-08 12:55:02
asal
379 orang telah melayarinya

Why is `nullptr` a Better Choice than `NULL` and `0` for Pointers in C  ?

Menggunakan nullptr: Kelebihan berbanding NULL dan 0

Penunjuk mesti dimulakan dengan betul untuk mengelakkan tingkah laku yang tidak dijangka. Manakala sintaks int* p1 = nullptr;, int* p2 = NULL;, dan int* p3 = 0; mungkin kelihatan setara dari segi fungsi, terdapat kelebihan ketara untuk menggunakan nullptr berbanding dua pilihan yang lain.

Lebih Muatan Kekaburan Resolusi:

Pertimbangkan fungsi terlampau beban:

void f(char const *ptr);
void f(int v);

f(NULL);  // ambiguous function call
Salin selepas log masuk

Dengan NULL, pengkompil tidak boleh menentukan fungsi mana yang hendak dipanggil, kerana ia boleh sama ada f(char const *) atau f(int). Kekaburan ini boleh membawa kepada ralat yang tidak dijangka. Walau bagaimanapun, menggunakan nullptr menyelesaikan kekaburan ini:

f(nullptr); // calls f(char const *)
Salin selepas log masuk

Pengkhususan Templat:

Dalam C , jenis nullptr ialah nullptr_t. Ini membenarkan pengkhususan templat untuk nullptr, memberikan fleksibiliti yang tiada tandingan:

template<typename T, T *ptr>
struct something{};                     // primary template

template<>
struct something<nullptr_t, nullptr>{};  // partial specialization for nullptr
Salin selepas log masuk

Menggunakan pengkhususan ini, anda boleh mengendalikan argumen nullptr secara unik:

template<typename T>
void f(T *ptr);   // function to handle non-nullptr argument

void f(nullptr_t); // overload to handle nullptr argument
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapakah `nullptr` Pilihan yang Lebih Baik daripada `NULL` dan `0` untuk Penunjuk dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan