2011-02-11 53 views
14

使用static_cast将int转换为bool是否可以,因为它会转换隐式转换的反转,但我仍然会收到警告?为什么将一个int转换为一个bool会给出警告?

例子:

MSVC++ 8

bool bit = static_cast<bool>(100); 
+2

即使使用`-Wall -Wextra -ansi -pedantic`,g ++也不会抱怨这一点。你使用什么编译器?也许发布精确的代码? – Thomas 2011-02-11 10:41:28

+0

你的演员吓坏了我。 – GManNickG 2011-02-11 10:49:17

+0

对我也是,编辑。 – user4344 2011-02-11 10:52:31

回答

45

仅仅因为转换a => b是隐含的并没有说明反转的可行性,b => a。

在你的情况下,你根本不应该施放。只是做了明显的事情:比较:

bool result = int_value != 0; 

这是一个转换到intbool唯一的逻辑正确的方式,它使代码更可读(因为它使得假设明确)。

顺便说一句,反过来也是一样。隐含地从bool转换为int只是懒惰。使映射明确:

int result = condition ? 1 : 0; 
3

我不知道为什么会发生,当你明确地投它(我认为这是一个性能警告?),但我通常使用代码像这样以避免任何警告:

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

这永远不会发出警告。

8

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

i != 0 

优先于或者:

(bool)i 

static_cast<bool>(i) 

可能的原因宁愿它包括:

  • 这种转换不会像其他的窄转换,是取模,
  • 的隐式的转换为bool也有点争议:很多人喜欢在通话后做if (buf != NULL)if (buf != 0)优先于if (buf)malloc,
  • 比较结果既简短又清晰。
-1

我一样有人已经发布:

bool result = int_value != 0; 

这是国际海事组织更简单的方法和它的更直观的比试图投的整数为bool。

相关问题