Saya membaca jawaban untuk pertanyaan ini C + + pro dan kontra dan mendapat keraguan ini saat membaca komentar.
programmer sering merasa bingung bahwa "ini" adalah pointer tetapi bukan referensi. kebingungan lain adalah mengapa "halo" bukan tipe std :: string tetapi mengevaluasi ke char const * (pointer) (setelah konversi array ke pointer) - Johannes Schaub - litb 22 Des '08 pada 1:56
Itu hanya menunjukkan bahwa itu tidak menggunakan konvensi yang sama dengan bahasa lain (nanti). - le dorfier 22 Des 088 pukul 3:35
Saya akan menyebut "ini" masalah yang cukup sepele. Dan oops, terima kasih telah menangkap beberapa kesalahan dalam contoh perilaku tidak terdefinisi saya. :) Meskipun saya tidak mengerti info tentang ukuran apa yang ada hubungannya dengan yang pertama. Pointer sama sekali tidak diizinkan untuk menunjuk di luar memori yang dialokasikan - jalf 22 Desember '08 di 4:18
Apakah ini poiner konstan? - yesraaj 22 Des 088 di 6:35
ini bisa konstan jika metode ini adalah const int getFoo () const; <- dalam lingkup getFoo, "this" adalah konstan, dan karenanya hanya dibaca. Ini mencegah bug dan memberikan beberapa tingkat jaminan kepada pemanggil bahwa objek tidak akan berubah. - Doug T. 22 Des 08 'jam 16:42
Anda tidak dapat menetapkan kembali "ini". yaitu Anda tidak dapat melakukan "this = & other;", karena ini adalah nilai. tapi ini tipe T *, bukan tipe T const. yaitu pointer yang tidak konstan. jika Anda menggunakan metode const, maka itu adalah pointer ke const. T const. tetapi penunjuk itu sendiri tidak benar - Johannes Schaub - litb 22 Des 08 di 17:53
pikirkan "ini" seperti ini: # tentukan ini (this_ + 0) di mana kompiler membuat "this_" sebagai penunjuk ke objek dan menjadikan "ini" kata kunci. Anda tidak dapat menetapkan "ini" karena (this_ + 0) adalah nilai. tentu saja bukan seperti itu (tidak ada makro seperti itu), tetapi dapat membantu memahaminya - Johannes Schaub - litb 22 Des '08 pada 17:55
Pertanyaan saya adalah, mengapa this
pointer bukan referensi? Adakah alasan khusus untuk menjadikannya pointer?
Beberapa argumen lebih lanjut mengapa this
menjadi referensi akan masuk akal:
- Pertimbangkan
Item 1
dariMore Effective C++
: gunakan referensi ketika dijamin bahwa kami memiliki objek yang valid, yaitu bukan NULL (interpretasi saya). - Lebih jauh, referensi dianggap lebih aman daripada pointer (karena kita tidak dapat mengacaukan memori dengan pointer yang tersesat).
- Ketiga, sintaks untuk mengakses referensi (
.
) sedikit lebih bagus dan lebih pendek daripada mengakses pointer (->
atau(*)
).
_AFXWIN_INLINE HWND CWnd::GetSafeHwnd() const { return this == NULL ? NULL : m_hWnd; }
this
selalu dievaluasitrue
?