ホームページ >バックエンド開発 >C++ >C コンパイラが比較演算子を自動的に生成しないのはなぜですか?

C コンパイラが比較演算子を自動的に生成しないのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-29 04:06:17404ブラウズ

Why Don't C   Compilers Automatically Generate Comparison Operators?

C コンパイラーが比較演算子を自動的に生成しない理由

コンパイラーはデフォルトのコンストラクターや代入演算子などの重要なメソッドを提供できるにもかかわらず、特に、operator== や Operator!= などの比較演算子の定義が省略されています。この省略により、次のような疑問が生じました: なぜですか?

1 つの引数は、コンパイラーがデフォルトのコピー コンストラクターを生成できる場合、デフォルトのoperator==() も提供できるはずであることを示唆しています。ただし、そうしないという決定は、 C の作成者である Bjarne Stroustrup がデフォルトのコピー メカニズムを含めることに消極的であることから来ている可能性があります。

Stroustrup は著書「The Design and Evolution of C」の中で、不承認を表明しています。デフォルトのコピー操作について説明し、自分のクラスではコピーを禁止することが多いと述べています。この抵抗感は、デフォルトのコピー コンストラクターが C から継承され、頻繁に悪用されているという事実から生じています。

したがって、なぜ C にデフォルトの演算子 ==() がないのかを疑問視するのではなく、なぜそれに含まれるのかを考える方が適切です。デフォルトの代入コンストラクターとコピー コンストラクター。この決定は、C との下位互換性を考慮して行われました。これは、C の進化において祝福であると同時に、不本意な妥協でもありました。

デフォルトのコピー操作を避けたい人のために、プライベート代入演算子とコピー コンストラクターを宣言します。 IDE スニペットに含めることは役立つ可能性があります。これにより、必要に応じてこれらの宣言を明示的に削除できるようになり、クラスの動作をより詳細に制御できるようになります。

以上がC コンパイラが比較演算子を自動的に生成しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。