1

我发现下面的网址

 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

错误消息间接地告诉您需要知道的内容——不允许重载仅作用于内置类型的运算符(二元或一元)。

对于用户定义的类型T,您可以分别重载二进制 +(例如 by T operator+(T lhs, T rhs))和一元 +(例如 by T operator+(T t))。您也可以定义operator+(T lhs, int rhs),但不能重载两个整数的加法。

于 2012-08-16T11:00:34.990 回答
1

自 n3337 13.5/6 以来示例不正确

操作符函数要么是非静态成员函数,要么是非成员函数,并且至少有一个类型为类、类引用、枚举或枚举引用的参数。

于 2012-08-16T11:01:15.613 回答