使用static_cast
将int转换为bool是不是可以,因为它会转换隐式转换的反向但我仍会收到警告?
示例:
MSVC ++ 8
bool bit = static_cast<bool>(100);
答案 0 :(得分:47)
仅仅因为转换a =&gt; b是隐含的并没有说明反向的可行性,b =&gt;一个。
在你的情况下,你根本不应该施放。做一件显而易见的事:比较:
bool result = int_value != 0;
这是将int
转换为bool
的唯一逻辑上正确的方法,它使代码更具可读性(因为它使假设明确)。
顺便提一下,这同样适用于相反的情况。从bool
隐式转换为int
只是懒惰。使映射显式:
int result = condition ? 1 : 0;
答案 1 :(得分:9)
这是你和你的编译器之间的事情,但微软认为你应该写:
i != 0
优先于:
(bool)i
或
static_cast<bool>(i)
选择它的可能原因包括:
if (buf != NULL)
之后,很多人更喜欢if (buf != 0)
或if (buf)
优先于malloc
,< / LI>
答案 2 :(得分:3)
我不确定为什么当你明确地施展它时会发生它(我认为这是一个性能警告?),但我通常使用这样的代码来避免任何警告:
int i;
bool b = (0!=i);
这绝不会发出警告。
答案 3 :(得分:-1)
我像已经发布的人那样做:
bool result = int_value != 0;
这是更容易的方式imo,它比尝试将整数转换为bool更直观。