C ++でポインターを参照にキャスト/変換する方法


143

Object *obプロトタイプである関数へのポインター()をどのように渡すことができvoid foo(Object &)ますか?


タイトルは「ポインタへのキャスト[参照]キャスト」とありますが、質問はポインタから始まり、参照が必要です。どちらの方向ですか
MSalters 2012

@MSalters 変換する必要があります。編集中です。しかし、私はどんな解決策も探していたので、キャスト
Dewsworld

回答:


210

次のように呼び出します。

foo(*ob);

質問のタイトルで提案されているように、ここではキャストが行われていないことに注意してください。これまでに行ったのは、オブジェクトへのポインタを逆参照して、関数に渡します。


25
@Ricobobそれはとても頻繁にSOで起こることです。簡単に理解できる簡単な質問への回答は、多くの賛成票を集めます。有権者はメリットを簡単に判断できないため、トリッキーな質問に対する長くて複雑な答えは、多くの場合、賛成票をほとんど獲得しません。担当者に関しては、担当者のキャップのため私はこれで何も得ませんでした。;-)しかし、私は心から同意します。複雑な答えがもっと多くの担当者を獲得したいと思います。
David Heffernan 2012

@DavidHeffernanはいこれは問題のようです-私がMetaSOに持ち込むのは問題だと思います-もし誰かがまだそこに提起していないのなら。
リシボブ2012

4
これはのコピーを作成しますobか、それともポインタを参照に変換します(キャストしない場合)。どのような場合obでしたかnullptr
ドリューノークス2014年

5
@Drewポインタを逆参照するだけです。コピーなし。変換なし。キャストなし。次に、オブジェクトは参照によって関数に渡されます。ポイントがnullの場合はエラーになります。
David Heffernan 2014年


41
foo(*ob);

それは同じオブジェクト型なので、キャストする必要はありません。逆参照するだけです。


多くの...を追加するamdを推測することは、通常、ここでは適切な回答の形式ではありません(この場合は正しいものです)。そのため、おそらく1つの反対票を得ました。
KillianDS 2012

5
bhhaaa、少なくとも30文字を書くようにしたので、「推測」を追加しました。「...........」を追加する方法でもあります
Roee Gavirel

10
@RoeeGavirel私はあなたの最初の賛成投票者です。私は反対投票が厳しいと感じたからです。FWIWあなたは30文字の制限を超えることができますが、HTMLコメント<!----------------------------->を追加しました答えの私の最初のバージョン!あなたの答えに対する私の編集がその方法を示しています。
David Heffernan 2012

説明のないコードのみの回答は、最近は嫌われています。
キースM

1
@KeithM-これはランダムなコメントで-1です。答えは約6年前に出されました。また、質問は「なぜ」を尋ねるのではなく、「どうして」だけを尋ねました。しかし、確かに、私は説明を追加します。
Roee Gavirel、2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.