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 字节类型,以便轻松访问低字节和高字节。此外,我希望“word”类型在调用任何算术运算符时完全像 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
我明白为什么它无法编译。我想避免重载所有算术运算符,例如 +=、-=、&=、|= 等。有没有办法避免必须定义所有运算符?我很可能需要其中的大部分。
非常感谢!