C++ 强制值为布尔值:(bool)会发出警告!!不
我更喜欢(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 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)
。这根本没有道理。再次检查导致警告的原因