位标志和位域
C 里位标志很常见:
#define FLAG_READ (1u << 0)
#define FLAG_WRITE (1u << 1)
#define FLAG_ERROR (1u << 2)
uint32_t flags = FLAG_READ | FLAG_WRITE;
if (flags & FLAG_ERROR) {
handle_error();
}
Rust 当然也能做位运算。但有两个习惯要先改:
C: if (flags & FLAG_ERROR)
Rust: if flags & FLAG_ERROR != 0
Rust 的 if 条件必须是 bool。整数不会自动当作真假值。