使用
static_cast
将 int 转换为 bool 是不是应该可以,因为它转换的是隐式转换的反向转换?但我仍然收到警告。
示例:
bool bit = static_cast<bool>(100);
仅仅因为 a => b 的转换是隐式的,并不能说明反向转换 b => a 的可行性。
就您而言,您根本不应该进行投射。只需做显而易见的事情:比较:
bool result = int_value != 0;
这是将
int
转换为 bool
的唯一逻辑上正确的方法,它使代码更具可读性(因为它使假设变得明确)。
顺便说一句,这同样适用于相反的情况。从
bool
隐式转换为 int
只是懒惰的行为。使映射明确:
int result = condition ? 1 : 0;
这是你和你的编译器之间的事,但微软认为你应该写:
i != 0
优先于:
(bool)i
或
static_cast<bool>(i)
选择它的可能原因包括:
if (buf != NULL)
,后更喜欢做
if (buf != 0)
或
if (buf)
而不是
malloc
我不确定为什么当你显式转换它时会发生这种情况(我认为这是性能警告?),但我通常使用这样的代码来避免任何警告:
int i;
bool b = (0!=i);
这永远不会发出警告。
我按照某人已经发布的方式做:
bool result = int_value != 0;
在我看来,这是更简单的方法,而且比尝试将整数转换为 bool 更直观。