В C ++ можно использовать логический оператор, для которого был задан двухсторонний оператор:
int unmasked = getUnmasked(); //some wide value
int masked = unmasked & 0xFF; // izolate lowest 8 bits
второе утверждение может быть легко опечатано:
int masked = unmasked && 0xFF; //&& used instead of &
Это приведет к некорректному поведению - masked
теперь будет 0 или 1, когда предполагается, что оно от 0 до 255. И C ++ никогда не будет жаловаться.
Можно ли спроектировать код таким образом, чтобы такие ошибки обнаруживались на уровне компилятора?