使用指针进行C++运算符重载

Sae*_*yth -1 c++ operator-overloading

struct Test {
    int A = 0;
    int B = 0;
};

Test* operator+(const Test *x, const Test *r) {

    Test *test = new Test;
    test->A = x->A + r->A;
    test->B = x->B + r->B;
    return test;
}
Run Code Online (Sandbox Code Playgroud)

为什么这不会工作并给予:

3 IntelliSense:非成员运算符需要具有类或枚举类型的参数

Adi*_*vin 5

显然,运算符+请求第一个参数不是指针.这可行:

Test* operator+(const Test &x, const Test& r){

    Test *test = new Test;
    test->A = x.A + r.A;
    test->B = x.B + r.B;
    return test;
}
Run Code Online (Sandbox Code Playgroud)

但是如果你没有返回指针就更安全,就像Jonachim说的那样.你应该做这个:

Test operator+(const Test &x, const Test& r){

    Test test;
    test.A = x.A + r.A;
    test.B = x.B + r.B;
    return test;
}
Run Code Online (Sandbox Code Playgroud)

  • 第一个参数可以是指针.所需要的只是至少有一个参数是用户定义的类型.这可以是第一个参数,也可以是第二个参数,或两者兼而有之. (4认同)
  • @ user3550045,这并不奇怪.C++明确指出不能为内置类型重载运算符. (2认同)