使用Boolean表示整数

Sha*_*han 0 c++ boolean

在c ++中,bool用于表示布尔值.这是真是假.但在某些情况下,我们也可以使用bool来表示整数.bool a=5;在c ++中是什么意思?

πάν*_*ῥεῖ 7

" bool a=5;在c ++中是什么意思?"

它实际上相当于写作

bool a = (5 != 0);
Run Code Online (Sandbox Code Playgroud)

"但在某些情况下,我们也可以使用bool来表示整数."

并不是的.该bool值仅表示用于初始化它的整数是零( - > false)还是不( - > true).


反过来(如@Daniel Frey评论中所述)false将被转换回整数0,true并将成为1.
因此,原始整数值(或任何其他表达式结果如指针nullptr,或者double不完全代表的0.0值)将丢失.


结论

正如提到LRiO的答案,这是不可能的存储信息以外falsetruebool变量.

虽然保证了转换规则(来自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习语.