在类内部或外部重载运算符有什么区别? 在C++中,我知道有两种方法可以超载。我们可以在内部(如classa)或外部(如classb)重载它。但是,问题是,这两者在编译时或运行时有什么区别吗 class a { public: int x; a operator+(a p) // operator is overloaded inside class { a temp; temp.x = x; temp.x = p.x; return temp; } }; class b { public: friend b operator+(b, b); int x; }; b operator+(b p1, b p2) // operator is overloaded outside class { p1.x += p2.x; return p1; }

在类内部或外部重载运算符有什么区别? 在C++中,我知道有两种方法可以超载。我们可以在内部(如classa)或外部(如classb)重载它。但是,问题是,这两者在编译时或运行时有什么区别吗 class a { public: int x; a operator+(a p) // operator is overloaded inside class { a temp; temp.x = x; temp.x = p.x; return temp; } }; class b { public: friend b operator+(b, b); int x; }; b operator+(b p1, b p2) // operator is overloaded outside class { p1.x += p2.x; return p1; },c++,operator-overloading,C++,Operator Overloading,成员操作员+要求LHS为a——自由操作员要求LHS或RHS为b,另一侧可转换为b struct Foo { Foo() {} Foo(int) {} Foo operator+(Foo const & R) { return Foo(); } }; struct Bar { Bar() {} Bar(int) {} }; Bar operator+(Bar const & L, Bar const & R) { ret

成员
操作员+
要求LHS为
a
——自由操作员要求LHS或RHS为
b
,另一侧可转换为
b

struct Foo {
    Foo() {}
    Foo(int) {}
    Foo operator+(Foo const & R) { return Foo(); }
};


struct Bar {
    Bar() {}
    Bar(int) {}
};

Bar operator+(Bar const & L, Bar const & R) {
    return Bar();
}


int main() {
    Foo f;
    f+1;  // Will work - the int converts to Foo
    1+f;  // Won't work - no matching operator
    Bar b;
    b+1;  // Will work - the int converts to Bar
    1+b;  // Will work, the int converts to a Bar for use in operator+

}

问题范围之外的可能重复:但两个加法运算符都未正确实现。运算符应重载以按预期的方式运行。通常(除了+=etc)运算符不会修改这些参数(因此pass by const reference和member运算符应该是const)。这似乎表明在类之外重载运算符总是更好的。但这是真的吗?