Скажіть, у мене є набір прапорів, закодованих у uint16_t flags
. Наприклад, AMAZING_FLAG = 0x02
. Тепер у мене є функція. Цю функцію потрібно перевірити, чи хочу я змінити прапор, тому що якщо я хочу це зробити, мені потрібно записати у спалах. І це дорого. Тому я хочу чек, який підказує мені, чи flags & AMAZING_FLAG
дорівнює doSet
. Це перша ідея:
setAmazingFlag(bool doSet)
{
if ((flags & AMAZING_FLAG) != (doSet ? AMAZING_FLAG : 0)) {
// Really expensive thing
// Update flags
}
}
Це не інтуїтивно зрозуміле твердження. Я відчуваю, що повинен бути кращий спосіб, щось на зразок:
if ((flags & AMAZING_FLAG) != doSet){
}
Але це насправді не працює, true
схоже, дорівнює 0x01
.
Отже, чи є акуратний спосіб трохи порівняти булевий?
(flags & AMAZING_FLAG) && doSet
:?