C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++における演算子オーバーロードの基本ルールとイディオムとは?

C++における演算子オーバーロードの3つの基本ルール

C++で演算子をオーバーロードする際には、守るべき3つの基本ルールがあります。あらゆるルールに例外が存在するように、これらにも例外はありますが、まずは以下の原則を押さえておきましょう。

ルール1:意味が明確でない演算子はオーバーロードしない

演算子の意味が明白で、誰もが異論なく受け入れられる場合以外は、オーバーロードすべきではありません。その代わりに、適切な名前を持つ関数を提供しましょう。この最初にして最も重要なルールの核心は、一言でいえば次の通りです。

「やめておけ」

これは意外に聞こえるかもしれませんが、演算子オーバーロードが適切なケースは実はごくわずかです。その理由は、その適用分野において演算子の使い方が広く知られ、争いの余地がないものでない限り、演算子の適用の背後にあるセマンティクス(意味論)を理解するのが難しいからです。

ルール2:演算子の周知のセマンティクスに従う

演算子をオーバーロードする場合は、常にその演算子に一般に知られている意味に従いましょう。C++はオーバーロードされた演算子のセマンティクスに制約を課しません。例えば、二項 + 演算子を実装したコードが「右辺から左辺を引く」という奇妙な動作をしていても、コンパイラは喜んでそれを通してくれます。しかし、そのような演算子を使うユーザーは、式 a + bb から a を引く結果になるとは決して疑わないでしょう。

ルール3:関連する一連の操作をすべて提供する

演算子は互いに関連しており、他の操作とも密接につながっています。自分の型が a + b をサポートするなら、ユーザーは a += b も呼び出せることを期待します。前置インクリメント ++a をサポートするなら、後置インクリメント a++ も動作することを期待するでしょう。a < b の比較ができるなら、a > b のチェックもできると当然考えるはずです。また、型をコピー構築できるなら、代入も正しく機能することを期待されます。

まとめ

ほとんどの場合、演算子オーバーロードは必要ありません。演算子の意味が明確に定義され、状況に本当に適している場合にのみ、オーバーロードを行うべきです。この記事は Stack Overflow の回答(https://stackoverflow.com/a/4421708/3719089)に着想を得たものです。

  1. Windowsで使えるC++開発向けおすすめIDE 7選

    ```html 大規模なプロジェクトをプレーンなテキストエディターだけで管理するのは困難です。こうしたケースではIDE(統合開発環境)を使った方が、生産性が向上しストレスも大幅に軽減されます。IDEにはさまざまな種類があり、自分のニーズに合ったものを選ぶことが重要です。ここでは、Windowsで利用できる優れたC/C++向けIDEをご紹介します。 1. Visual Studio Microsoftが開発した定番IDEです。Windows上でのC++プログラムの構築・開発・プロファイリングにおいて、最高クラスのツール群を備えています。豊富なプラグインストアも魅力で、Azure、PowerShe

  2. Pythonの変数スコープ基本ルールとは?LEGBルールをわかりやすく解説

    Pythonにおける変数の参照順序(スコープの解決方法)を理解するうえで、最も有名なのが「LEGBルール」です。これは、Mark Lutz氏の名著『Learning Python』の中で紹介されている記憶術で、Pythonが変数を探す順序を4つの頭文字で表したものです。LEGBルールとは?Pythonは変数を参照する際、最も狭いスコープから最も広いスコープへと、以下の順序で名前を探します。L:Local(ローカル)現在実行中の関数内で定義された変数を指します。関数の内部で代入された変数は、その関数のローカルスコープに属します。E:Enclosing(エンクロージング)別の関数を囲む外側の関数(