强制值布尔(布尔)使得警告,! 犯规(Forcing value to boolean: (bo

2019-10-20 08:00发布

我喜欢(布尔)的方式较多,但它会产生警告。 我如何摆脱掉的警告?

我有这样的代码:

bool something_else = 0;

void switcher(int val = -1){
    if(val != -1){
        something_else = (bool)val;
    }else{
        something_else ^= 1;
    }
}

如果我只是做其他人一样和使用“!” 或者获得某种隐藏的警告信息使用(布尔)时? 或者是“!” 实际上比(布尔)更快?

我想用(布尔),所以我不得不隐藏警告,但如何?

编辑: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;

问题是,我希望它尊重,我想将它转化成布尔值。 我不想隐藏所有的布尔警告,因为有时他们救了我的屁股。

Answer 1:

其他方式:

switch (val) {
  case -1: something_else = !something_else; break;
  case  0: something_else = false; break;
  default: something_else = true; break;
}


Answer 2:

您应该使用运营商和构建特定的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);
}

如果你的绰号是不言自明的,它可能是有意义的编写代码,别人也就会明白。 在这个特殊问题的情况下,使用bool类型适当必将提高你进一步与其他开发商合作。



Answer 3:

您可以隐含转换明确与(val != 0) 该行为将是相同的强制转换为布尔,或!! ,但让你的意图明确针对的类型val



Answer 4:

我与VC ++的警告:

main.cpp中:5:警告C4800:'诠释:强制值bool“真”或“假”(性能警告)

你可以解决它,如果你不“逼”的价值为布尔,但分配一个值,该值已经是布尔值:

something_else = val != 0;

(不要问我为什么这不愧是一个警告 - 该通知您的严重问题(/ W3警告)间海事组织,那将是好了很多,有一个特殊的标志来打开此类可疑值的警告。)

但是,什么是大局观:切换或使用VAL(其中-1表示“不使用”)?

怎么样:

bool something_else = 0;

void switcher(bool val, bool use_val = false){
    if(use_val){
        something_else = val;
    }else{
        something_else = !something_else;
    }
}

或与tribool(之前从未使用过它)::)

#include <boost/logic/tribool.hpp>

bool something_else = false;

void switcher(boost::tribool val = boost::indeterminate){
    if(!indeterminate(val)){
        something_else = val;
    }else{
        something_else = !something_else;
    }
}


Answer 5:

我想用(布尔),所以我不得不隐藏警告,但如何?

你为什么不征询编译器上的警告文档? http://msdn.microsoft.com/en-us/library/b6801kcy(VS.71).aspx

当被分配或强迫bool类型未bool的一个值时产生该警告。 典型地,该消息被通过分配INT变量,其中int变量只包含值为真和假的,并且可以重新声明为bool类型为bool变量引起的。 如果您不能重写表达式使用bool类型,那么你可以添加“!= 0”来表达,这给表达bool类型 。 铸造表达式bool类型不会禁用警告,这是由设计。



Answer 6:

我不认为它在这种情况下,但你总是可以#pragra警告禁用 。

#pragra warning disable # [, #]

这也可能是基于编译器警告级别( http://msdn.microsoft.com/en-us/library/b6801kcy(VS.80).aspx )。



文章来源: Forcing value to boolean: (bool) makes warning, !! doesnt