C++ には既にポインター型があり、それはすでに非常に強力ですが、参照型もあり、ほとんどの作業はポインターでも実行できます。参照型の利点は何ですか? C++ の作成者がこの型を追加したのはなぜですか?
3 に答える
答えは「コピーコンストラクター」です。
C++ は値ベースの言語です。と言うとき、が と同じ値を持つFoo x; Foo y = x;
方法が必要です。これを行うには、コピー コンストラクターが必要です。コピー コンストラクターはオブジェクトを引数として取らなければなりませんが、それをコピーすることはできません。これがまさに定義しようとしている操作だからです。y
x
x
したがって、参照によって引数を取る必要があります。
(コピー コンストラクターを奇妙に動作させてアドレスを取ることもできますが、それは予期せぬことであり、特に C 言語からの進化を考えると、言語を混乱させることになります。新しい型機能は、はるかにクリーンで強力なソリューションです。)
まず、オブジェクトを null にできないことを示します。
第二に、別の変数を指すように割り当てることはできません。
参照は、彼の人生で 1 つのオブジェクトのみを参照しており、参照するオブジェクトが必要です (null にすることはできません)。
私の考えでは、C++ の作成者は (C# のような) 参照のみを使用することを目指していましたが、次の 2 つの理由からポインターの使用を許可する必要がありました。 Cとの互換性を取り戻します(CがコンパイルするすべてのものはC ++でコンパイルされます)