3.4.2 bool类型与true和false
在bool类型成为标准C++的一部分之前,每个人都想使用不同的方法产生类似bool类型的行为。这产生了可移植性问题,可能会引入微妙的错误。
标准C++的bool类型有两种由内建的常量true(转换为整数1)和false(转换为整数0)表示的状态。这3个名字都是关键字。此外,一些语言元素也已经被采纳:
因为有很多现存的代码使用整型int表示一个标志,所以编译器隐式转换int为bool(非零值为true而零值为false)。理想的情况下,编译器会给我们一个警告,建议纠正这种情况。
用++把一个标志设置为真是一种“糟糕的编程风格”。这样做依然是允许的,但受到抵制,意味着在将来的某个时候它可能是不合法的。问题在于从bool到int做了隐式类型转换,增加了值(可能超过了0和1的正常布尔值的范围),然后再做相反的隐式转换。
指针(本章的后面将会引入)在必要的时候也自动转换成bool值。