如何正确地重载结构的'+'运算符

Qbi*_*bik -1 c++ operator-overloading

我想重载A的'+'运算符,struct但我得到编译器警告这是我的尝试:

struct wektor{
    int x;
    int y=0;    
    int norm(){
        return x*x+y*y;
    }
};

wektor& operator +(wektor &a,wektor &b){
    wektor c;
    c.x=a.x+b.x;  // 12 line - warning here
    c.y=a.y+b.y;
    return c;
};
Run Code Online (Sandbox Code Playgroud)

编译器警告:

[警告]非静态数据成员初始化程序仅在-std = c ++ 11或-std = gnu ++ 11 [默认情况下启用] 12行中可用

Jos*_*eld 8

警告告诉你这条线:

int y=0;
Run Code Online (Sandbox Code Playgroud)

在C++ 11之前,您不能在非静态非const成员上使用初始化器.如果要初始化y为0,则必须为wektor成员初始化列表提供构造函数.

尽管如此,您的operator+参数应该是类型const wektor&.它也应该按值返回,因为此时您正在返回对在函数末尾将被销毁的本地对象的引用,这很糟糕.它应该如下所示:

wektor operator +(const wektor &a, const wektor &b){
    wektor c;
    c.x=a.x+b.x;  // 12 line - warning here
    c.y=a.y+b.y;
    return c;
};
Run Code Online (Sandbox Code Playgroud)

  • @Qbik做了两个更改 - 这个并没有通过引用返回. (2认同)