Nasıl C ++ referans işaretçi dönüştürmek / dönüştürmek


143

Object *obPrototip olan bir işleve bir pointer ( ) nasıl iletebilirim void foo(Object &)?


Başlık, "işaretçiye cast [sic] başvurusu" der, ancak soru bir işaretçiyle başlar ve bir referansa ihtiyaç duyar. Hangi yön?
MSalters

@ MSalters dönüştürmek gerekir . Düzenliyorum. Ama ne olursa olsun çözüm arıyordum, bu yüzden döküm
Dewsworld

Yanıtlar:


210

Buna şöyle deyin:

foo(*ob);

Soru başlığınızda önerildiği gibi burada herhangi bir dökümün olmadığını unutmayın. Tüm yaptığımız, daha sonra işleve ilettiğimiz nesneye işaretçiyi referans olarak almaktır.


25
@Ricobob SO'da çok sık olan budur. Kolayca anlaşılabilen basit soruların cevapları çoğu kez çok oy alır. Zor sorulara uzun ve karmaşık cevaplar genellikle az sayıda oy alır çünkü seçmenler liyakati kolayca yargılayamazlar. Temsilci gelince, bu konuda hiçbir şey var çünkü kap başlığı. ;-) Ama yürekten katılıyorum. Keşke karmaşık cevaplar daha fazla temsilci topladı.
David Heffernan

@DavidHeffernan Evet bu sorun gibi görünüyor - Sanırım MetaSO'ya götürmek için bir sorun - eğer birisi zaten orada yükseltmediyse.
Ricibob

4
Bu ob, işaretçinin bir kopyasını oluşturur mu veya yalnızca işaretçiyi bir referansa dönüştürür mü (dönüştürülmezse)? Ya oboldu nullptr?
Drew Noakes

5
@ İşaretçi Basitçe işaretçiyi dereferences. Kopya yok. Dönüşüm yok. Oyuncular yok. Nesne daha sonra işleve istinaden geçirilir. Nokta null olduğunda bir hatadır.
David Heffernan


41
foo(*ob);

Aynı Nesne türüyle yayınlamanıza gerek yoktur, yalnızca referanstan arındırmanız gerekir.


amd bir sürü ekleme tahmin genellikle burada iyi bir cevap biçimi değildir (bu durumda doğru olsa bile), muhtemelen bu yüzden bir downvote var.
KillianDS

5
bhhaaa, "Sanırım" ı ekledim çünkü en az 30 karakter yazmamı sağladı. ben de bu şekilde ekliyorum "..........."
Roee Gavirel

10
@RoeeGavirel İlk seçmeninizim çünkü downvote'un sert olduğunu hissettim. FWIW 30 karakter sınırını aşabilir ancak yaptığım bir HTML yorumu <! -----------------------------> ekleyebilirsiniz cevabın ilk versiyonu! Cevabınızdaki düzenlemem nasıl olduğunu gösteriyor.
David Heffernan

Hiçbir açıklama yapılmadan sadece kod yanıtları bu günlerde kaşlarını çattı.
Keith M

1
@KeithM - Bu rastgele bir yorum ve -1. Cevap yaklaşık 6 yıl önce verildi, aynı zamanda soru "neden" diye sormadı, sadece "nasıl" istedi. Ama eminim, bir açıklama ekleyeceğim.
Roee Gavirel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.