ポインタに対する参照の最大の利点の1つは、単純さと読みやすさの向上です。いつものように、何かを単純化すると使いやすくなりますが、柔軟性と制御が犠牲になりますが、低レベルのものを使用できます(他の人が述べているように)。
ポインタはしばしば「醜い」と批判されます。
class* myClass = new class();
これで、使用するたびに、最初に次のいずれかで逆参照する必要があります。
myClass->Method() or (*myClass).Method()
読みやすさが失われ、複雑さが増すにもかかわらず、(値を渡す代わりに)実際のオブジェクトを変更し、巨大なオブジェクトをコピーする必要がないというパフォーマンスの向上のために、パラメーターとしてポインターを頻繁に使用する必要がありました。
私にとって、これが、ポインタと同じ利点を提供するために参照が最初に「生まれた」理由ですが、そのすべてのポインタ構文はありません。これで、(値だけでなく)実際のオブジェクトを渡すことができ、オブジェクトを操作するためのより読みやすい通常の方法が得られます。
MyMethod(&type parameter)
{
parameter.DoThis()
parameter.DoThat()
}
C ++参照は、C#/ Java参照とは異なり、一度値を割り当てると再割り当てできません(宣言時に割り当てる必要があります)。これは、constポインター(別のオブジェクトに再ポイントできないポインター)を使用するのと同じでした。
JavaとC#は非常に高レベルの現代言語であり、長年にわたってC / C ++に蓄積された多くの混乱をクリーンアップし、ポインターは間違いなく「クリーンアップ」する必要のあるものの1つでした。
ポインターを知ることについてのあなたのコメントがあなたをより強力なプログラマーにする限り、これはほとんどの場合真実です。知らないうちにそれを使用するのではなく、何かが「どのように」機能するかを知っているなら、これはしばしばあなたに優位性を与えることができると思います。エッジの量は常に変化します。結局のところ、それがどのように実装されているかを知らずに何かを使用することは、OOPとインターフェースの多くの美しさの1つです。
この特定の例では、ポインターについて知っていると、参照に役立ちますか?C#参照はオブジェクト自体ではなく、オブジェクトを指していることを理解することは、非常に重要な概念です。
#1:値を渡していない
初心者にとっては、ポインターを使用すると、ポインターがアドレスだけを保持していることがわかります。それだけです。変数自体はほとんど空であるため、引数として渡すと非常に便利です。パフォーマンスの向上に加えて、実際のオブジェクトを操作しているため、行った変更は一時的なものではありません。
#2:ポリモーフィズム/インターフェース
インターフェイスタイプの参照があり、それがオブジェクトを指している場合、オブジェクトにさらに多くの機能がある場合でも、そのインターフェイスのメソッドのみを呼び出すことができます。オブジェクトは、同じメソッドを異なる方法で実装する場合もあります。
これらの概念をよく理解していれば、ポインターを使用しなかったことで多くのことを見逃しているとは思いません。C ++は、時々手を汚すのが良いので、プログラミングを学ぶための言語としてよく使われます。また、低レベルの側面で作業することで、現代語の快適さを理解できます。私はC ++から始めて、現在はC#プログラマーです。生のポインターを使用することで、内部で何が起こっているのかをよりよく理解できるようになりました。
誰もがポインタから始める必要はないと思いますが、重要なのは、値型の代わりに参照が使用される理由を理解していることです。それを理解する最良の方法は、その祖先であるポインタを調べることです。