コピー コンストラクターと const オブジェクト: より深い説明
C では、クラスを定義するとき、一般に、 ルールに従うことが推奨されます。 3 つ目は、コピー コンストラクター、代入演算子、デストラクターの実装を提案しています。コピー コンストラクターは、既存のオブジェクトからデータをコピーして新しいオブジェクトを作成する役割を果たします。
コピー コンストラクターでの const の使用
伝統的に、使用することは良い習慣であると考えられています。次の例のように、コピー コンストラクターの引数の型として const を指定します。
class ABC {
public:
int a;
int b;
ABC(const ABC &other)
{
a = other.a;
b = other.b;
}
};
const がない場合はどうなりますか?
次に示すように const 修飾子を省略すると、いくつかの問題が発生します。
class ABC
{
public:
int a;
int b;
ABC(ABC &other)
{
a = other.a;
b = other.b;
}
};
まず、const オブジェクトのコピーを作成できなくなります。引数は const としてマークされていないため、非 const オブジェクトのみを受け入れることができます。したがって、const 参照から新しいオブジェクトを初期化することはできません。
第二に、const がないということは、引数オブジェクトがコピー コンストラクター内で変更できることを意味します。コピー コンストラクターの目的は既存のオブジェクトの同一のコピーを作成することであるため、これは一般に望ましくありません。コピー中に元のオブジェクトを変更すると、予期しない、または間違った動作が発生する可能性があります。
const 引数を使用する理由
コピー コンストラクターで const 引数を使用する説得力のある理由がいくつかあります。 :
結論として、コピー コンストラクターで const 引数を使用すると、論理的な正確性、オブジェクトの不変性、一時オブジェクトとの互換性など、大きな利点が得られます。 const 以外の引数が適切な例外的なケースもあるかもしれませんが、一般的な推奨事項は引き続き const.
を使用することです。免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3