完全使用void*(无论是否const)的原因是它提供的通用性.它就像一个基类:所有指针都 void*可以隐式地转换为它,但是void*必须明确地手动完成对类型指针的强制转换.
通常,C++有更好的方法来提供这个(即OO和模板),所以它根本没有多大意义void*,除非你正在连接C.但是,如果你使用它,那么const提供什么它提供在其他地方:你需要一个(额外的)const_cast能够改变所引用的对象,所以你不太可能意外地改变它.
当然,这取决于你不使用C风格的演员表,而是使用显式的C++演员表.从void*任何T*一个演员要求a static_cast,这不允许删除const.所以你可以投射const void*到const char*使用static_cast,但不是char*.这需要额外的const_cast.