C++重载运算符,具有相反的关联顺序

Has*_*dev 6 c++ operator-overloading associativity

很难想出一个标题......(我不是英语母语人士.)

struct A
{
    int value;
    A operator+(int i) const
    {
        A a;
        a.value=value+i;
        return a;
    };
};
int main(){
    A a;
    a.value=2;
    a=a+2;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

此代码按预期编译/工作,但是当我将a = a + 2更改为a = 2 + a时,它将不再编译.GCC给了我这个错误:

no match for ”operator+” in ”2 + a”
Run Code Online (Sandbox Code Playgroud)

有没有办法以某种方式使2 +工作就像+ 2?

Dan*_*rey 7

你需要一个免费的功能,课后定义

struct A
{
   // ...
};

A operator+(int i, const A& a)
{
  return a+i; // assuming commutativity
};
Run Code Online (Sandbox Code Playgroud)

另外,您可以考虑A& operator+=(int i);A工具中定义两个版本的operator+自由函数.您可能也对Boost.Operators或其他助手感兴趣以简化A,请参阅我的个人资料以获取两个选项.