2

ポインタ渡しよりも参照渡しの方が好まれる例を誰か教えてください。

基本的にどちらも同じ機能を提供しますが、参照渡しが必須になる場所を知りたいです。

また、どちらを使用するかを決定する方法を提案してください。

いくつかの基本的な例を提案してください。

4

4 に答える 4

3

コンストラクターと代入演算子をコピーします。

struct A {
  ...
  A(const A& copy);
  A& operator = (const A& copy);
};

これらは必須の状況です。これらとは別に、他の状況もあります (たとえば+<>などの他の演算子のオーバーロード)。

また、どちらを使用するかを決定する方法を提案してください。

私はほとんどの場所で参照 (より C++ スタイル) を好み、参照が使用できない場合は、ポインター (より C スタイル) を使用する傾向があります。参照は、ポインター
のやや類推的な表現です。constすなわちA&と似ていA* constます。したがって、それらは誤って場所を上書きすることに対する組み込みの安全性を提供します.

于 2012-04-10T11:58:32.643 に答える
1

コピーコンストラクターは、参照によって引数を取る必要があります。

演算子のオーバーロードは、ポインタではなく、値または参照によって引数を取る必要があります。

通常の機能の場合、選択はあなた次第です。ただし、null引数または動的配列を受け入れる場合は、ポインターを使用する必要があります。

可能な限り参照を使用することを好む人もいます。nullであるかどうかを確認する必要はなく、単一のオブジェクトまたは配列を参照しているかどうか、または関数がオブジェクトを削除する可能性があるかどうかについて混乱する余地はありません。関数がオブジェクトを変更する可能性があることを呼び出しサイトで視覚的に示すため、ポインターを使用することを好む人もいます。

于 2012-04-10T12:10:10.467 に答える
1

私の単純な経験則は、可能な場合は常に参照渡しを優先することです。null 値を渡す機能が必要な場合は、ポインターによる受け渡しを使用する必要があります。それ以外の場合は、参照渡しを使用します。

于 2012-04-10T11:58:40.633 に答える
1

演算子をオーバーロードするときは、参照を渡すことが必須です。例えば ​​:

class A {
    A& operator=(const A &other);
}
于 2012-04-10T11:59:43.700 に答える