Cara melakukan cast / convert pointer ke referensi di C ++

143

Bagaimana saya bisa melewatkan pointer ( Object *ob) ke fungsi prototipe itu void foo(Object &)?

Dewsworld
sumber
Judul mengatakan "cast [sic] reference to pointer" tetapi pertanyaannya dimulai dengan sebuah pointer dan membutuhkan referensi. Arah mana itu?
MSalters
@Saringan harus dikonversi . Saya sedang mengeditnya. Tapi saya sedang mencari solusi apa pun yang saya dapatkan, jadi saya menyebutkan pemain
Dewsworld

Jawaban:

210

Sebut saja seperti ini:

foo(*ob);

Perhatikan bahwa tidak ada casting yang terjadi di sini, seperti yang disarankan dalam judul pertanyaan Anda. Yang telah kita lakukan adalah mendefinisikan pointer ke objek yang kemudian kita lewati ke fungsi.

David Heffernan
sumber
25
@Ricobob Itulah yang sering terjadi pada SO. Jawaban untuk pertanyaan sederhana yang mudah dipahami sering kali mengumpulkan banyak suara. Jawaban panjang dan kompleks untuk pertanyaan rumit seringkali mendapat sedikit peningkatan karena pemilih tidak dapat dengan mudah menilai kelayakan. Adapun perwakilan, saya tidak mendapatkan apa-apa tentang ini karena topi rep. ;-) Tapi saya sepenuh hati setuju. Saya berharap jawaban yang rumit mendapat lebih banyak perwakilan.
David Heffernan
@ Davidvide Ya ini tampaknya menjadi masalah - saya kira ini masalah untuk dibawa ke MetaSO - jika seseorang belum mengangkatnya di sana.
Ricibob
4
Apakah ini membuat salinan ob, atau hanya mengkonversi (jika tidak membuang) pointer ke referensi? Bagaimana jika obdulu nullptr?
Drew Noakes
5
@Drew Ini hanya menunjuk pointer. Tidak ada salinan Tidak ada konversi. Tidak ada pemain. Objek kemudian diteruskan dengan merujuk ke fungsi. Ini adalah kesalahan jika intinya nol.
David Heffernan
1
@DrewNoakes stackoverflow.com/questions/2727834/…
David Heffernan
41
foo(*ob);

Anda tidak perlu melemparkannya karena itu adalah tipe objek yang sama, Anda hanya perlu mengubahnya.

Roee Gavirel
sumber
menebak dan menambahkan banyak ... biasanya bukan format jawaban yang baik di sini (meskipun benar dalam kasus ini), itu mungkin mengapa Anda mendapat satu downvote.
KillianDS
5
bhhaaa, saya menambahkan "Saya kira" karena itu membuat saya menulis setidaknya 30 karakter. itu juga cara saya menambahkan "..........."
Roee Gavirel
10
@RoeeGavirel Saya pemilih pertama Anda karena saya merasa downvote menjadi keras. FWIW Anda bisa mendapatkan lebih dari batas 30 char tetapi menambahkan komentar HTML <! -----------------------------> yang saya lakukan di jawaban pertamaku versi pertama! Hasil edit saya untuk jawaban Anda menunjukkan caranya.
David Heffernan
Jawaban khusus kode, tanpa penjelasan, tidak disukai hari ini.
Keith M
1
@KeithM - Itu komentar acak dan -1. Jawabannya diberikan sekitar 6 tahun yang lalu, juga pertanyaannya tidak menanyakan "mengapa" tetapi hanya menanyakan "bagaimana". Tapi tentu, saya akan menambahkan penjelasan.
Roee Gavirel