为什么将一个int转换为bool会发出警告?

时间:2011-02-11 10:38:51

标签: c++ visual-c++ casting boolean compiler-warnings

使用static_cast将int转换为bool是不是可以,因为它会转换隐式转换的反向但我仍会收到警告?

示例:

MSVC ++ 8

bool bit = static_cast<bool>(100);

4 个答案:

答案 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)

选择它的可能原因包括:

  • 这种转换不像其他缩小转换那样,采用模数,
  • 对bool的隐含转换也有点争议:在调用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更直观。