1

と書かれている以下のURLを見つけました。

 If an operator can be used as either a unary or a binary 
 operator (&, *, +, and -), you can overload each use separately.

Linuxでg ++を使用していますが、次のことを試しましたが、コンパイルできませんでした。

int operator+ (const int a,const int b){
   std::cout << "MINE"<<std::endl;
   return 0;
}

int main(){
   char c='c';
   std::cout << c+2 << std::endl;
}

エラーは言う

error: ‘int operator+(int, int)’ must have an argument 
of class or enumerated type

私は喜んでプレイし、整数昇格ルールの動作を見たいと思っていました。

何か間違ったことをしているのですか、それともその URL は MS に対してのみ有効ですか、それともプロモーション ルールを誤解していますか?

4

2 に答える 2

6

エラー メッセージは、知っておくべきことを間接的に示しています。組み込み型のみに作用する演算子 (2 項または単項) をオーバーロードすることは許可されていません。

ユーザー定義型Tの場合、バイナリ + (たとえばT operator+(T lhs, T rhs)) と単項 + (たとえば ) を別々にオーバーロードできますT operator+(T t)。を定義することもできますoperator+(T lhs, int rhs)が、2 つの整数の加算をオーバーロードすることはできません。

于 2012-08-16T11:00:34.990 に答える
1

n3337 13.5/6 以降、例は正しくありません

演算子関数は、非静的メンバー関数であるか、非メンバー関数であり、型がクラス、クラスへの参照、列挙、または列挙への参照であるパラメーターを少なくとも 1 つ持つ必要があります。

于 2012-08-16T11:01:15.613 に答える