Diyelim ki bir uint16_t kodlanmış bir dizi bayrak var flags. Örneğin AMAZING_FLAG = 0x02,. Şimdi bir fonksiyonum var. Bu işlevin bayrağını değiştirmek isteyip istemediğimi kontrol etmesi gerekir, çünkü bunu yapmak istersem flaşa yazmam gerekir. Ve bu pahalı. Bu nedenle, bana flags & AMAZING_FLAGeşit olup olmadığını söyleyen bir kontrol istiyorum doSet. Bu ilk fikir:
setAmazingFlag(bool doSet)
{
if ((flags & AMAZING_FLAG) != (doSet ? AMAZING_FLAG : 0)) {
// Really expensive thing
// Update flags
}
}
Bu sezgisel bir if ifadesi değildir. Daha iyi bir yol olmalı gibi hissediyorum, şöyle bir şey:
if ((flags & AMAZING_FLAG) != doSet){
}
Ama bu aslında işe yaramıyor, trueeşit gibi görünüyor 0x01.
Yani, bir boolean ile biraz karşılaştırmanın düzgün bir yolu var mı?
(flags & AMAZING_FLAG) && doSetmu:?