【发布时间】:2010-03-13 18:33:11
【问题描述】:
我更喜欢 (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: 警告信息是warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning) 就行了something_else = (bool)val; 就行了something_else = val; 但不是就行了something_else = !!val;
问题是,我希望它尊重我想将其转换为布尔值。我不想隐藏所有布尔警告,因为有时它们救了我的命。
【问题讨论】:
-
使用
(bool)显式转换时没有收到警告;你能发布更多细节吗?您正在谈论的警告和您正在使用的编译器会有所帮助。 -
你从哪里得到警告?我会说应该是
^= 1产生警告,而您似乎在谈论(bool)。这没有任何意义。再次,重新检查您的案例中导致警告的原因。 -
@Johannes:呃……众所周知,正确的做法是
reinterpret_cast<bool&>(some_int):) -
reinterpret_cast 是最糟糕的方法。最好的是 !!,其次是 != 0(反之亦然,取决于您的口味)
-
@Pavel:我认为 reinterpret_cast 评论是个玩笑。最好的方法是 !=0 ,这实际上是 Visual Studio 文档所要求的形式。
标签: c++ visual-studio-2008 boolean