質問: C++を勉強中のものです。 C++11での比較演算子のオーバーロードについての質問です。 内容としては、 ・私の演算子のオーバーロードの認識が間違っていないかの確認 ・オーバーロードのスコープ内でオーバーロードしない比較演算子の使い方 を知りたいです。 まず私の認識ですが、 ``` //ファイル1 bool operator >( const aaa& b ) { //>演算子をオーバーロード ..... //処理 return; } a > b //1 ``` ``` ///ファイル3 ファイル1をincludeしない if(a > b) { //2 return bool; } ``` ``` //ファイル2 #include "ファイル1" if(int c > int d)//3 ``` 演算子のオーバーロードをすると1と2が同じ処理になるという認識です。 オーバーロードのスコープ内でオーバーロードしない方法ですが、 比較演算子(>、<)のオーバーロードされているスコープ内で 普通の3の処理を行いたいです。 私の演算子のオーバーロードの理解が浅いための質問だということはわかっております。 どなたかご教示願います。
回答: A. そんな方法はない 演算子のオーバーロードが許容されているのは、その作用素のうち少なくとも1個が非組込型の場合のみです。組込型だけの演算の再定義はできません。 そして、非組込型の演算は、基本的に最初は定義されていません。なのでオーバーロードしていない状況ではそもそもコンパイルできません。オーバーロードすることで、はじめて演算子が使えるようになります。 非組込型の(再定義可能な)演算のうち、唯一最初から定義されている演算は、代入です。これはクラス定義の中でのみ、オーバーロード可能です。グローバルでは定義不可能です。 したがって、どのような状況でも、演算子のオーバーロードをする、しないの選択はできません。