强制值为布尔值:(bool)发出警告,!! 犯规

New*_*bie 1 c++ boolean visual-studio-2008

我喜欢(bool)更多,但它会产生警告.我如何摆脱警告?

我的代码如下:

bool something_else = 0;

void switcher(int val = -1){
    if(val != -1){
        something_else = (bool)val;
    }else{
        something_else ^= 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

我应该像其他人一样做,并使用'!!' 或者在使用(bool)时以某种方式隐藏警告信息?或者是'!!' 实际上比(布尔)更快?

我想用(bool)所以我必须隐藏警告,但是如何?

编辑:我正在使用Visual Studio 2008,对不起,我忘了告诉.

编辑2:警告信息是warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)和它出现在线something_else = (bool)val;上但在线something_else = val;但不在线something_else = !!val;

问题是,我希望它尊重我想将其转换为布尔值.我不想隐藏所有布尔警告,因为有时候他们保存了我的屁股.

Ker*_*ido 14

您应该使用特定于该bool类型的运算符和构造:

bool something_else = false;

void switcher(int val = -1)
{
    if(val == -1)    // val is -1 by default so THIS part is likely to execute
        something_else = !something_else;
    else
        something_else = (val != 0);
}
Run Code Online (Sandbox Code Playgroud)

如果您的昵称是不言自明的,那么编写其他人也会理解的代码可能是有意义的.如果遇到这个特殊问题,bool适当使用该类型肯定会改善您与其他开发人员的进一步合作.

  • @Newbie:所以你认真地说你问题中的代码并不奇怪?好吧,祝你好运!否则,我只是不知道哪些代码很奇怪. (2认同)

Ada*_*ght 7

您可以使用隐式转换(val != 0).该行为将与强制转换为bool相同,或者!!使您的意图明确地与类型相关val.