[英]C++ overloaded operator with reverse order of 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;
}
此代碼按預期編譯/工作,但是當我將 a=a+2 更改為 a=2+a 時,它將不再編譯。 GCC 給了我這個錯誤:
no match for ”operator+” in ”2 + a”
有沒有辦法讓 2+a 像 a+2 一樣工作?
你需要一個自由函數,在類之后定義
struct A
{
// ...
};
A operator+(int i, const A& a)
{
return a+i; // assuming commutativity
};
另外,您可以考慮定義A& operator+=(int i);
在A
實現兩個版本的operator+
作為免費功能。 您可能還對 Boost.Operators 或其他簡化A
助手感興趣,請參閱我的個人資料以了解兩個選項。
當然,在類外定義逆運算符:
struct A
{
int value;
A operator+(int i) const
{
A a;
a.value=value+i;
return a;
};
};
//marked inline to prevent a multiple definition
inline A operator+(int i, const A& a)
{
return a + i;
}
這里的其他答案工作正常。 但是,您還有另一個選擇是為單個int
創建一個構造函數,如下所示:
struct A
{
int value;
A(int i) {
value = i;
}
};
這允許整數隱式轉換,並允許您只為您的struct
重載運算符:
A operator+(const A& other) const
{
// All you need to do is work with an A, and associativity works fine
};
當然,這確實允許所有整數隱式轉換為A
s,這可能是也可能不是可取的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.