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

问题描述 投票:0回答:4

使用

static_cast
将 int 转换为 bool 是不是应该可以,因为它转换的是隐式转换的反向转换?但我仍然收到警告。

示例:

MSVC++8

bool bit = static_cast<bool>(100);
c++ visual-c++ casting boolean compiler-warnings
4个回答
52
投票

仅仅因为 a => b 的转换是隐式的,并不能说明反向转换 b => a 的可行性。

就您而言,您根本不应该进行投射。只需做显而易见的事情:比较:

bool result = int_value != 0;

这是将

int
转换为
bool
的唯一逻辑上正确的方法,它使代码更具可读性(因为它使假设变得明确)。

顺便说一句,这同样适用于相反的情况。从

bool
隐式转换为
int
只是懒惰的行为。使映射明确:

int result = condition ? 1 : 0;

9
投票

这是你和你的编译器之间的事,但微软认为你应该写:

i != 0

优先于:

(bool)i

static_cast<bool>(i)

选择它的可能原因包括:

  • 此转换不像其他采用模数的缩小转换,
  • 隐式转换为 bool 也有点争议:很多人在调用
    if (buf != NULL)
    ,
     后更喜欢做 
    if (buf != 0)
    if (buf)
     而不是 
    malloc
  • 比较更短、更清晰。

3
投票

我不确定为什么当你显式转换它时会发生这种情况(我认为这是性能警告?),但我通常使用这样的代码来避免任何警告:

int i;
bool b = (0!=i);

这永远不会发出警告。


-1
投票

我按照某人已经发布的方式做:

bool result = int_value != 0;

在我看来,这是更简单的方法,而且比尝试将整数转换为 bool 更直观。

© www.soinside.com 2019 - 2024. All rights reserved.