ポインター パラメーターと参照パラメーター: 詳細な検討
質問:
Do ポインター パラメーター(例: int foo(bar* p) { ... }) と参照パラメータ (例: int foo(bar& r) { ... }) は C では同じように動作します ?
ポインターと参照の違いは、標準での実装の詳細にとどまりません。参照は糖衣構文の概念を具体化しており、基本的に変数のエイリアスを作成します。これにより、コンパイラは、ポインタが複雑になるコードを最適化できます。
機能的等価性:
null ポインタが考慮されないと仮定すると、関数 foo(bar* p) と foo someInt() メソッドが仮想でない場合、(bar&r) は本質的に同等です。どちらの関数も、パラメーターを通じてオブジェクトのメンバー関数に直接アクセスします。ただし、 someInt() が仮想の場合、参照ベースのパラメータ関数 (foo(bar& r)) は実際のオブジェクトの型に基づいて正しいメソッドを呼び出しますが、ポインタベースの関数 (foo(bar* p)) は常に呼び出します。基本クラスのメソッドを呼び出します。
参照への代入:
代入 bar& ref = *ptr_to_bar ではスライスは発生しません。参照 ref は、ptr_to_bar が指すオブジェクトにエイリアスを付け、そのメンバーに直接アクセスできるようにします。
その他の相違点:
以上がC ではポインターと参照パラメーターは機能的に同じですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。