C++把类型分为四类,即 object types(对象类型)、function types(函数类型)、reference types(引用类型)、void types。四者的性质有显著区别,例如不存在指向 void types 的引用和指向 reference type 的引用,除了具有 function types 的实体(也就是“
函数重载”),其他实体不可重名。 bool 类型属于 object types。显然,在分类中,void 和 bool 就属于不同的层级。
按照定义,void 表示一个“取值范围为
空集”的类型。规定如果函数声明为返回 void 类型,则表示函数不返回任何值。可以把任意
表达式显式转换到 void 类型,其效果是丢弃表达式的值(对于具有类类型 class type 的表达式,不会调用 conversion function,即使这个类确实有名为 operator void 的成员函数)
bool 类型的取值可以是 true 或 false 。一些语法结构需要把表达式转换为 bool 类型(例如 if 语句和 while 语句中的条件),如果表达式具有类类型 class type,表达式的 conversion function 会被考虑。在 C++11 以后,即使选中的 conversion function 被声明为 explicit,也同样会被调用(虽然语句 if (e){} 中没有写出
static_cast<bool>(e) 这样的表达式,但是把 e 转换为 bool 类型的转换视作显式转换,而非隐式转换)