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


143

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


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.


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


41
foo(*ob);

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.