Kami sekarang memiliki C ++ 11 dengan banyak fitur baru. Yang menarik dan membingungkan (setidaknya bagi saya) adalah yang baru nullptr
.
Yah, tidak perlu lagi untuk makro jahat NULL
.
int* x = nullptr;
myclass* obj = nullptr;
Tetap saja, saya tidak mengerti cara nullptr
kerjanya. Sebagai contoh, artikel Wikipedia mengatakan:
C ++ 11 memperbaiki ini dengan memperkenalkan kata kunci baru untuk dijadikan sebagai konstanta penunjuk nol yang dibedakan: nullptr. Ini adalah tipe nullptr_t , yang secara implisit dapat dikonversi dan sebanding dengan tipe penunjuk atau tipe penunjuk-ke-anggota. Ini tidak secara implisit dapat dikonversi atau sebanding dengan tipe integral, kecuali untuk bool.
Bagaimana kata kunci dan turunan tipe?
Juga, apakah Anda memiliki contoh lain (di samping Wikipedia) di mana nullptr
lebih baik dari yang lama 0
?
nullptr_t
dijamin hanya memiliki satu anggota nullptr
,? Jadi, jika suatu fungsi dikembalikan nullptr_t
, maka kompiler sudah tahu nilai mana yang akan dikembalikan, terlepas dari isi fungsinya?
std::nullptr_t
dapat dipakai, tetapi semua instance akan identik dengan nullptr
karena jenisnya didefinisikan sebagai typedef decltype(nullptr) nullptr_t
. Saya percaya alasan utama tipe ini ada adalah agar fungsi dapat kelebihan beban untuk ditangkap nullptr
, jika perlu. Lihat di sini untuk contoh.
nullptr
juga digunakan untuk mewakili referensi nol untuk handle yang dikelola di C ++ / CLI.