En C++, il est possible d'utiliser un opérateur logique où un opérateur biwise était destiné:prévenir l'utilisation abusive de l'opérateur logique au lieu des opérateurs binaires
int unmasked = getUnmasked(); //some wide value
int masked = unmasked & 0xFF; // izolate lowest 8 bits
la deuxième déclaration pourrait facilement être mal orthographié:
int masked = unmasked && 0xFF; //&& used instead of &
Cela provoquera un comportement incorrect - masked
sera maintenant 0 ou 1 quand il est compris entre 0 et 255. Et C++ ne se plaindra jamais.
Est-il possible de concevoir du code de telle sorte que de telles erreurs soient détectées au niveau du compilateur?
Juste pour être pédant: masqué sera maintenant 0 ou une valeur non nulle dépendant du compilateur. –
@Martin York: Juste pour être pédant: sur une implémentation conforme masked sera maintenant 0 ou 1. Le résultat de '&&' est un 'bool' en C++, et quand il est promu en un entier, le type' false' est converti en ' 0' et 'true' se convertit en' 1'. –
Doit être vieux. Étais-je en train de repenser aux jours C? –