+ =运算符重载

Mii*_*cck 2 c++ operator-overloading

我正在尝试在以下代码中为类gridCoord和genDir重载运算符+ =:

struct gridCoord{
    unsigned x;
    unsigned y;
}

inline gridCoord operator +(const gridCoord l,const genDir& r){
// This operator is tested and works
}

inline void operator += (gridCoord l,const genDir& r){
    l = l+r;
    std::cout<<l;
}
Run Code Online (Sandbox Code Playgroud)

+运算符可以工作,但是当我运行以下代码时:

int main(){

gridCoord coord(1,0);
genDir gd;

coord += gd;
std::cout<< coord;

std::cin.get();
return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到了输出

x: 2 y: 0
x: 1 y: 0
Run Code Online (Sandbox Code Playgroud)

我期待

x: 2 y: 0
x: 2 y: 0
Run Code Online (Sandbox Code Playgroud)

如果它工作.似乎+ =运算符定义的实际上并没有按照预期修改左参数.任何想法为什么会这样?谢谢!

πάν*_*ῥεῖ 6

要修改,l您需要通过引用传递它:

inline void operator += (gridCoord& l,const genDir& r){
                               // ^
Run Code Online (Sandbox Code Playgroud)

否则,您只修改传递gridCoord参数的副本.