2014-04-18 2 views
0

Tenir compte de l'extrait de code suivant:En utilisant bitwise & sur booléenne

main() 
{ 
    bool flag = true;    //line 1 
    flag &= funcReturningBool(); //line 2 
    flag &= funcReturningBool2(); 
    flag &= funcReturningBool3(); 
    //.... 
    //.... 
    //.... 
    //so many such cases 
} 

bool funcReturningBool() 
{ 
    bool ret = false; 
    // my logic which may (not) modify ret 
    return ret; 
} 

bool funcReturningBool2() 
{ 
    bool ret = false; 
    // my logic which may (not) modify ret 
    return ret; 
} 

bool funcReturningBool3() 
{ 
    bool ret = false; 
    // my logic which may (not) modify ret 
    return ret; 
} 

L'outil analyseur statique de code indique la question suivante (ligne 2):

"opérateur Bitwise est appliqué La valeur résultante peut ne pas être comme prévu "

Est-ce que quelqu'un peut signaler si je fais quelque chose de mal? Également prescrire quelques méthodes alternatives utiles/logiques pour atteindre le même!

Répondre

0

Vous ne devriez simplement pas utiliser un opérateur au niveau du bit sur les valeurs booléennes. Apparemment, le compilateur promeut la sortie de funcReturningBool ou la variable flag en un entier signé, et vous avertit des effets inattendus possibles.

Vous devez vous en tenir aux opérateurs booléens. Si &&= existait, vous auriez pu écrire flag &&= funcReturningBool();. Au lieu de cela, utilisez flag = flag && funcReturningBool();

+0

Dans l'extrait de code mis à jour de la question, est-il conseillé de suivre l'approche que vous avez suggérée? – CinCout

+0

Pourquoi jamais? –