在c++中,bool用于表示布尔值。也就是说它成立或成立。但在某些情况下我们也可以使用 bool 来表示整数。
是什么意思bool a=5;
in c++?
“是什么意思bool a=5;
在 C++ 中?”
其实就相当于写
bool a = (5 != 0);
“但在某些情况下,我们也可以使用 bool 来表示整数。”
并不真地。这bool
仅值代表用于初始化它的整数是否为零(->false
)或不(->true
).
反过来(如@丹尼尔·弗雷的评论 https://stackoverflow.com/questions/30332082/using-boolean-to-represent-integers/30332119?noredirect=1#comment48759151_30332119) false
将被转换回整数0
, and true
会变成1
.
所以原始整数值(或任何其他表达式结果,如指针,此外nullptr
, or double
值不完全正确代表0.0 https://stackoverflow.com/questions/4020582/treating-double-variable-as-boolean) 会迷路。
结论
正如中提到的LRiO 的回答 https://stackoverflow.com/a/30332269/1413395,不可能存储除false
or true
in a bool
多变的。
不过,有保证的转换规则(引自cppreference.com http://en.cppreference.com/w/cpp/language/implicit_cast):
安全布尔问题
在 C++11 中引入显式转换函数之前,设计一个应该可在布尔上下文中使用的类(例如if(obj) { ... }
)提出了一个问题:给定一个用户定义的转换函数,例如T::operator bool() const;
,隐式转换序列在该函数调用之后允许一个附加的标准转换序列,这意味着结果 bool 可以转换为 int,允许这样的代码obj << 1;
or int i = obj;
.
一个早期的解决方案可以在std::basic_ios
,它定义了operator!
and operator void*
(直到 C++11),这样的代码如if(std::cin) {...}
编译是因为void*
可转换为bool
, but int n = std::cout;
无法编译,因为void*
不可转换为int
。这仍然允许无意义的代码,例如删除std::cout;
编译,许多 C++11 之前的第三方库都是用更复杂的解决方案设计的,称为安全布尔习语 http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Safe_bool.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)