这是一种基本知识,但我似乎无法掌握这一点。引用 here
void *p
和 const void *p
有足够的不同吗?为什么函数会使用 const void *
而不是 void *
?
最佳答案
完全使用 void*
的原因(无论 const
与否)是它提供的那种通用性。它就像一个基类:所有指针都是 void*
并且可以隐式地转换成它,但是从void*
到类型化指针的转换必须是明确地和手动地完成。
通常,C++ 有更好的方法来提供这样做(即 OO 和模板),所以使用 void*
根本没有多大意义,除非你正在连接 C . 然而,如果你使用它,那么 const
提供它在其他地方提供的东西:你需要一个(额外的)const_cast
来改变引用的对象,所以你不太可能意外更改它。
当然,这取决于您不使用 C 风格的强制转换,而是使用显式的 C++ 强制转换。从 void*
到任何 T*
的转换需要一个 static_cast
,并且这不允许删除 const
.因此,您可以使用 static_cast
将 const void*
转换为 const char*
,但不能转换为 char*
。这将需要一个额外的 const_cast
。
关于c++ - 指向空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3707872/