误解全局运算符过载规则

时间:2012-08-16 10:58:45

标签: c++ g++ operator-overloading

我发现下面的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

我愿意参与并观看整数推广规则。

我做错了什么或者网址只对MS有效或我误解了促销规则?

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:1)

示例不正确,因为 n3337 13.5 / 6

运算符函数应该是非静态成员函数或者是非成员函数并且具有 至少一个参数,其类型是类,对类的引用,枚举或对引用的引用 枚举。