在c ++中,bool用于表示布尔值.这是真是假.但在某些情况下,我们也可以使用bool来表示整数.bool a=5;在c ++中是什么意思?
"
bool a=5;在c ++中是什么意思?"
它实际上相当于写作
bool a = (5 != 0);
"但在某些情况下,我们也可以使用bool来表示整数."
并不是的.该bool值仅表示用于初始化它的整数是零( - > false)还是不( - > true).
反过来(如@Daniel Frey评论中所述)false将被转换回整数0,true并将成为1.
因此,原始整数值(或任何其他表达式结果如指针nullptr,或者double不完全代表的0.0值)将丢失.
结论
正如提到LRiO的答案,这是不可能的存储信息以外false或true在bool变量.
虽然保证了转换规则(来自cppreference.com):
安全布尔问题
在C++ 11中引入显式转换函数之前,设计一个应该在布尔上下文中使用的类(例如
if(obj) { ... })会出现一个问题:给定一个用户定义的转换函数,例如T::operator bool() const;,隐式转换序列允许一个额外的标准转换在函数调用之后的序列,这意味着结果bool可以转换为int,允许这样的代码为obj << 1;或int i = obj;.这种情况的一个早期的解决方案可以看出在
std::basic_ios,它定义operator!和operator void*(直到C++ 11),从而使代码诸如if(std::cin) {...}编译因为void*可转化为bool,但int n = std::cout;不因为编译void*是无法转换为int.这仍然允许删除等无意义的代码std::cout;进行编译,许多pre-C++ 11第三方库都设计了更精细的解决方案,称为Safe Bool习语.