Mengapa NULL Digantikan dengan nullptr dalam C ?
Dalam C , makro NULL digunakan untuk mewakili penuding nol. Walau bagaimanapun, dalam C 0x, NULL telah digantikan dengan kata kunci baharu, nullptr. Perubahan ini dibuat atas beberapa sebab:
-
Keselamatan Jenis Yang Dipertingkat: NULL boleh ditukar secara tersirat kepada sebarang jenis penunjuk. Ini boleh menyebabkan kekaburan apabila memanggil fungsi terlampau beban. Sebagai contoh, peleraian lebihan fungsi berikut adalah samar-samar:
void f(int);
void f(foo *);
Salin selepas log masuk
Panggilan f(NULL) boleh memadankan sama ada terlebih beban, bergantung pada konteks.
-
Semakan Ralat Masa Kompilasi yang Diperbaiki: nullptr mempunyai jenis std::nullptr_t, iaitu berbeza daripada jenis lain. Ini membolehkan pengkompil mengesan ralat lebih awal apabila menggunakan nullptr dalam konteks yang salah, seperti menetapkan nullptr kepada pembolehubah bukan penuding.
-
Ketekalan dengan Bahasa Lain: Kata kunci nullptr adalah konsisten. dengan bahasa pengaturcaraan lain yang menggunakan kata kunci yang berbeza untuk penunjuk nol, seperti Java dan Python.
Dalam senario apakah penggunaan nullptr berfaedah?
Menggunakan nullptr dan bukannya NULL adalah berfaedah dalam senario berikut:
-
Apabila panggilan terlampau beban fungsi: nullptr hanya akan sepadan dengan std::nullptr_t dan jenis penuding dalam resolusi beban lampau. Ini menghapuskan kekaburan dan memastikan lebihan fungsi yang betul dipanggil.
-
Apabila bekerja dengan templat: nullptr membenarkan templat ditulis dengan cara yang lebih generik dan selamat jenis. Contohnya, templat yang beroperasi pada penunjuk boleh menggunakan nullptr sebagai nilai lalai, memastikan templat boleh digunakan dengan penunjuk nol.
Atas ialah kandungan terperinci Mengapakah NULL Digantikan oleh nullptr dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!