2
union word{
uint16_t value;
struct{
uint8_t low;
uint8_t high;
};
inline word(uint16_t value) noexcept
:value(value)
{}
inline word &operator=(uint16_t rhs) noexcept{
value = rhs;
return *this;
}
inline operator uint16_t() const noexcept{
return value;
}
}
我想定義一個小端的2字節類型,它很容易訪問低位和高位字節。另外,當調用任何算術運算符時,我希望「單詞」類型完全像uint16_t一樣行動。因此,我已經重載了uint16_t的類型轉換運算符。類型轉換過載聯合無過載+ =
但我遇到了一個小問題:
word w1 = 5;
w1 = w1 + w1; //this works fine due to implicit conversion
w1 += w1; //fails to compile. lhs will not implicitly convert
我明白爲什麼它無法編譯。我想避免重載所有算術運算符,例如+ =, - =,& =,| =等。是否有避免必須定義所有運算符?我很可能需要他們中的大部分。
非常感謝!