Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 强制值为布尔值:(bool)会发出警告!!不_C++_Visual Studio 2008_Boolean - Fatal编程技术网

C++ 强制值为布尔值:(bool)会发出警告!!不

C++ 强制值为布尔值:(bool)会发出警告!!不,c++,visual-studio-2008,boolean,C++,Visual Studio 2008,Boolean,我更喜欢(bool),但它会产生警告。我如何摆脱这些警告 我有如下代码: bool something_else = 0; void switcher(int val = -1){ if(val != -1){ something_else = (bool)val; }else{ something_else ^= 1; } } 我是否应该像其他人一样使用“!!”或者让它在使用(bool)时以某种方式隐藏警告消息?或者是“!!”实际上比

我更喜欢(bool),但它会产生警告。我如何摆脱这些警告

我有如下代码:

bool something_else = 0;

void switcher(int val = -1){
    if(val != -1){
        something_else = (bool)val;
    }else{
        something_else ^= 1;
    }
}
我是否应该像其他人一样使用“!!”或者让它在使用(bool)时以某种方式隐藏警告消息?或者是“!!”实际上比(bool)快

我想使用(bool),因此我必须隐藏警告,但如何隐藏

编辑:我正在使用Visual Studio 2008,很抱歉我忘了告诉你

编辑2:警告消息是
警告C4800:'int':强制将值设置为bool'true'或'false'(性能警告)
并且它出现在行
其他内容=(bool)val和行上的
something\u else=val但不是在线
其他东西=!!瓦尔


问题是,我想把它转换成布尔值。我不想隐藏所有的布尔警告,因为有时它们救了我的命。

您可以使用
(val!=0)
显式地进行隐含转换。该行为将与对布尔的强制转换相同,或
,但使您的意图对于
val

的类型明确。您可以使用
(val!=0)
使隐含转换明确。该行为将与对布尔的强制转换相同,或
,但要明确说明与
val

类型相关的意图,应使用特定于
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
类型肯定会改善您与其他开发人员的进一步合作。

您应该使用特定于
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
类型肯定会改善您与其他开发人员的进一步合作。

另一种方式:

switch (val) {
  case -1: something_else = !something_else; break;
  case  0: something_else = false; break;
  default: something_else = true; break;
}
另一种方式:

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

我用VC++得到一个警告:

main.cpp:5:警告C4800:'int': 强制值为布尔“真”或 “false”(性能警告)

如果不将值“强制”到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(以前从未使用过):)

#包括
bool something\u else=错误;
无效切换器(boost::tribool val=boost::不确定){
如果(!不确定(val)){
其他事物=瓦尔;
}否则{
其他的东西=!其他的东西;
}
}

我用VC++得到一个警告:

main.cpp:5:警告C4800:'int': 强制值为布尔“真”或 “false”(性能警告)

如果不将值“强制”到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(以前从未使用过):)

#包括
bool something\u else=错误;
无效切换器(boost::tribool val=boost::不确定){
如果(!不确定(val)){
其他事物=瓦尔;
}否则{
其他的东西=!其他的东西;
}
}

我想使用(bool),因此我必须隐藏警告,但如何隐藏?

为什么不查阅编译器的警告文档呢?

当一个值 这不是布尔分配或 被迫输入布尔类型。典型的 此消息是由分配 int变量到bool变量,其中 int变量只包含值 真与假,也可能是 重新声明为布尔型如果你 无法重写要使用的表达式 键入bool,然后可以将“!=0”添加到 表达式,它给出 表达式类型bool。铸造 类型为bool的表达式将不可用 禁用警告,该警告由 设计


我想使用(bool),因此我必须隐藏警告,但如何隐藏?

为什么不查阅编译器的警告文档呢?

当一个值 这不是布尔分配或 被迫输入布尔类型。典型的 此消息是由分配 int变量到bool变量,其中 int变量只包含值 真与假,也可能是 重新声明为布尔型如果你 无法重写要使用的表达式 键入bool,然后可以将“!=0”添加到 表达式,它给出 表达式类型bool。铸造 类型为bool的表达式将不可用 禁用警告,该警告由 设计


在这种情况下我不建议这样做,但你总是可以的


它也可能基于编译器警告级别()。

在这种情况下,我不建议这样做,但您始终可以这样做


它也可能基于编译器警告级别()。

使用
(bool)
显式强制转换时,我没有收到任何警告;你能发布更多细节吗?你正在谈论的警告和你正在使用的编译器会有所帮助。你从哪里得到警告?我认为应该是
^=1
产生警告,而您似乎在谈论
(bool)
。这根本没有道理。再次检查导致警告的原因