使用static_cast
将int转换为bool是否可以,因为它会转换隐式转换的反转,但我仍然会收到警告?为什么将一个int转换为一个bool会给出警告?
例子:
MSVC++ 8
bool bit = static_cast<bool>(100);
使用static_cast
将int转换为bool是否可以,因为它会转换隐式转换的反转,但我仍然会收到警告?为什么将一个int转换为一个bool会给出警告?
例子:
MSVC++ 8
bool bit = static_cast<bool>(100);
仅仅因为转换a => b是隐含的并没有说明反转的可行性,b => a。
在你的情况下,你根本不应该施放。只是做了明显的事情:比较:
bool result = int_value != 0;
这是一个转换到int
的bool
唯一的逻辑正确的方式,它使代码更可读(因为它使得假设明确)。
顺便说一句,反过来也是一样。隐含地从bool
转换为int
只是懒惰。使映射明确:
int result = condition ? 1 : 0;
我不知道为什么会发生,当你明确地投它(我认为这是一个性能警告?),但我通常使用代码像这样以避免任何警告:
int i;
bool b = (0!=i);
这永远不会发出警告。
,你和你的编译器之间的,但微软认为你应该写:
i != 0
优先于或者:
(bool)i
或
static_cast<bool>(i)
可能的原因宁愿它包括:
if (buf != NULL)
或if (buf != 0)
优先于if (buf)
到malloc
,我一样有人已经发布:
bool result = int_value != 0;
这是国际海事组织更简单的方法和它的更直观的比试图投的整数为bool。
即使使用`-Wall -Wextra -ansi -pedantic`,g ++也不会抱怨这一点。你使用什么编译器?也许发布精确的代码? – Thomas 2011-02-11 10:41:28
你的演员吓坏了我。 – GManNickG 2011-02-11 10:49:17
对我也是,编辑。 – user4344 2011-02-11 10:52:31