Bu sorunun cevabını C ++ artıları ve eksileri okuyordum ve yorumları okurken bu şüphe var.
programcılar sık sık "bu" bir işaretçi olduğunu, ancak bir referans değil kafa karıştırıcı buluyorum. başka bir karışıklık neden "merhaba" std :: string türünde değil, ancak char const * (pointer) (dizi-işaretçi dönüşüm sonra) değerlendirir - Johannes Schaub - litb 22 Aralık '1:56
Bu sadece diğer (sonraki) dillerle aynı kuralları kullanmadığını gösterir. - le dorfier 22 Aralık 08:35
Yine de "bu" şeye oldukça önemsiz bir konu diyebilirim. Hata! Tanımsız davranış örneklerimdeki birkaç hatayı yakaladığınız için teşekkürler. :) Her ne kadar ben boyutu hakkında ilk bilgi bir şey ile ilgisi olduğunu anlamıyorum. İşaretçinin ayrılan belleğin dışını göstermesine izin verilmiyor - jalf 22 Aralık 08: 04'te
Bu sürekli bir işaretçi mi? - yesraaj 22 Aralık 08:35
yöntem const int getFoo () const ise bu sabit olabilir; <- getFoo kapsamında "bu" sabittir ve bu nedenle salt okunurdur. Bu, hataları önler ve arayan kişiye nesnenin değişmeyeceğini garanti eder. - Doug T. 22 Aralık 08:42
"Bunu" yeniden atayamazsınız. yani "this = & other;" yapamazsınız, çünkü bu bir değerdir. ancak bu T tipi değildir, T türü değildir. yani sabit olmayan bir işaretçi. Eğer bir const yöntemindeyseniz, o zaman const için bir işaretçi. Tşş. ancak işaretçinin kendisi sabit değildir - Johannes Schaub - litb 22 Aralık 08: 17: 53
"this" ifadesini şöyle düşünün: #defile (this_ + 0), derleyicinin nesneye işaretçi olarak "this_" oluşturduğunu ve "this" ifadesini anahtar sözcük haline getirdiğini tanımlayın. "this" atayamazsınız çünkü (this_ + 0) bir değerdir. Tabii ki böyle değil (böyle bir makro yok), ama bunu anlamaya yardımcı olabilir - Johannes Schaub - litb 22 Aralık 08:55
Benim sorum, this
bir işaretçi neden bir referans değil? İşaretçi yapmak için özel bir neden var mı?
this
Referans olmanın neden mantıklı olacağına dair bazı argümanlar :
- Düşünün
Item 1
danMore Effective C++
biz geçerli bir nesne değil yani NULL (benim yorumum) sahip olduğu garanti edildiğinde kullanıma referansları:. - Ayrıca, referanslar işaretçilerden daha güvenli kabul edilir (çünkü hafızayı başıboş bir işaretçi ile vidalayamayız).
- Üçüncüsü, referanslara (
.
) erişim sözdizimi, işaretçilere (->
veya(*)
) erişmekten biraz daha hoş ve kısadır .
_AFXWIN_INLINE HWND CWnd::GetSafeHwnd() const { return this == NULL ? NULL : m_hWnd; }
this
zaman için değerlendirme yapmıyor mutrue
?