2014-04-18 46 views
0

考慮下面的代碼片斷:使用按位與上布爾

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; 
} 

靜態代碼分析器工具指出了以下問題(第2行):

位運算符被施加

有人可以指出我是否做錯了什麼? 也規定一些有用/邏輯的替代方法來實現相同!

回答

0

你只是不應該在布爾值上使用按位運算符。顯然,編譯器將funcReturningBool或變量flag的輸出提升爲有符號整數,並警告您可能會有意想不到的效果。

你應該堅持布爾運算符。如果存在&&=,則可以寫入flag &&= funcReturningBool();。相反,使用flag = flag && funcReturningBool();

+0

在問題中更新的代碼片段中,建議遵循您建議的方法嗎? – CinCout

+0

爲什麼不呢? –