C++增量++运算符重载

C++ increment ++ operator overloading

我知道如何重载运算符 += 如果我使用 class 例如

class temp
{
public:
    int i;
    temp(){ i = 10; }
    int operator+=(int k)
    {
           return i+=k;
    }
};
int main()
{
    temp var;
    var += 67;
    cout << var.i;
    return 0;
}

但为什么我不能为基本数据类型创建一个重载的 += 函数

int operator+=(int v, int h)
{
    return  v += (2*h);
}
int main()
{
    int var = 10;
    var += 67;
    cout << i;
    return 0;
}

编译上述重载函数时出现错误。

不允许重载基本类型的运算符。作为参考,请看这里写的:

http://www.cprogramming.com/tutorial/operator_overloading.html

然而,您可以通过在要重载的原始类型周围创建一个 "wrapper" class,然后创建一个 "conversion constructor" 从原始类型到您的自定义 class 和另一个 "conversion operator" 从您的包装器自定义类型返回原始类型。

你临时 class 像这样:

class temp
{
public:
    int i;
    temp(const int& orig){ i = orig; }
    operator int(void) const { return i; }
    int operator+=(int k)
    {
           return i+=k;
    }
};

基本类型不支持运算符重载。这些操作由直接CPU指令执行。但这可能是有充分理由的,因为重载基本算术函数的代码将无法维护。