nullptr dan Keselamatan Penuding Null
Gunakan nullptr dan bukannya NULL atau 0 serta lindungi daripada penyahrujukan null.
nullptr dan Keselamatan Penuding Null ialah pelajaran C++ Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran C++ Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.
Apakah Penuding Nol
Penuding nol ialah nilai khas yang menunjuk kepada "tiada apa-apa". Menyahrujuknya menyebabkan tingkah laku tidak ditakrifkan — biasanya program ranap dengan kegagalan segmen.
Kata Kunci Penuding Nol dalam C++ Moden
Sejak C++11, kata kunci nullptr mewakili literal penuding nol berjenis. Utamakannya berbanding NULL atau 0.
int* p1 = nullptr;
int* p2 = NULL; // legacy macro
int* p3 = 0; // legacy literalMengapa nullptr
NULL hanyalah makro untuk 0. Ia boleh mengelirukan penyelesaian lebihan muatan antara int dan int*. nullptr mempunyai jenis unik std::nullptr_t.
void f(int);
void f(int*);
f(NULL); // calls f(int) -- surprising!
f(nullptr); // calls f(int*) -- correctMenyemak Nilai Nol
Penuding ditukar secara tersirat kepada bool: bukan nol ialah benar, manakala nol ialah palsu.
if (p) std::cout << "has value\n";
if (!p) std::cout << "is null\n";
if (p != nullptr) std::cout << "explicit form\n";Sentiasa Mulakan
Penuding yang tidak dimulakan mengandungi nilai sampah dan seolah-olah menunjuk ke sesuatu tempat. Sentiasa mulakannya, walaupun hanya dengan nullptr.
int* p; // BAD: undefined contents
int* q = nullptr; // GOODMenyahrujuk Nilai Nol
Membaca atau menulis melalui penuding nol menyebabkan tingkah laku tidak ditakrifkan. Pada kebanyakan sistem meja, ia menyebabkan kegagalan segmen. Pada peranti terbenam, ia boleh merosakkan memori secara senyap.
Semakan Perlindungan
Lakukan semakan sebelum menyahrujuk dalam API awam atau apabila pemanggil mungkin menghantar nilai nol.
void process(int* data) {
if (!data) return;
*data *= 2;
}Rujukan Menggantikan Penuding
Jika nilai nol tidak pernah bermakna, gunakan parameter rujukan. Pengkompil menjamin bahawa rujukan itu terikat pada sesuatu.
// Before
void f(Widget* w); // can be null?
// After
void f(Widget& w); // must be a real widgetstd::optional untuk Nilai Pilihan
C++17 menambahkan std::optional<T> untuk semantik "mungkin ada nilai" — lebih jelas daripada penuding yang boleh bernilai nol dalam konteks yang tidak melibatkan peruntukan.
#include <optional>
std::optional<int> find(int x);
if (auto v = find(42)) std::cout << *v;Penuding Pintar dan Nilai Nol
std::unique_ptr dan std::shared_ptr juga boleh bernilai nol. Kedua-duanya ditukar kepada bool untuk semakan dan ditetapkan semula dengan = nullptr.
Kesilapan: Penuding Tergantung selepas Delete
Selepas delete p, penuding masih menyimpan alamat lama. Tetapkan semula: p = nullptr;. Penuding pintar melakukannya secara automatik.
Semakan Pantas
Literal penuding nol yang manakah patut digunakan dalam C++ moden?
Imbas Kembali
Gunakan nullptr untuk nilai penuding nol. Sentiasa mulakan penuding. Lakukan semakan sebelum menyahrujuk atau, lebih baik lagi, gunakan rujukan dan std::optional apabila nilai nol tidak pernah sah.
Pelajari C++ dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 51
- Pelajaran
- 203
Soalan Lazim
Adakah pelajaran “nullptr dan Keselamatan Penuding Null” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran C++ Academy, termasuk “nullptr dan Keselamatan Penuding Null”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “nullptr dan Keselamatan Penuding Null”?
Gunakan nullptr dan bukannya NULL atau 0 serta lindungi daripada penyahrujukan null. Anda berlatih C++ Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan C++ Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran C++ Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “nullptr dan Keselamatan Penuding Null” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Penuding Mentah dan Operator Address-of
- Penyahrujukan dan Aritmetik Penuding
- nullptr dan Keselamatan Penuding Null
- Masa untuk Menggunakan Penuding berbanding Rujukan