c++ - 指向空指针

标签 c++ pointers void

这是一种基本知识,但我似乎无法掌握这一点。引用 here

void *pconst void *p 有足够的不同吗?为什么函数会使用 const void * 而不是 void *

最佳答案

完全使用 void* 的原因(无论 const 与否)是它提供的那种通用性。它就像一个基类:所有指针都是 void* 并且可以隐式地转换成它,但是从void* 到类型化指针的转换必须是明确地和手动地完成。

通常,C++ 有更好的方法来提供这样做(即 OO 和模板),所以使用 void* 根本没有多大意义,除非你正在连接 C . 然而,如果你使用它,那么 const 提供它在其他地方提供的东西:你需要一个(额外的)const_cast 来改变引用的对象,所以你不太可能意外更改它。

当然,这取决于您不使用 C 风格的强制转换,而是使用显式的 C++ 强制转换。从 void* 到任何 T* 的转换需要一个 static_cast,并且这不允许删除 const .因此,您可以使用 static_castconst void* 转换为 const char*,但不能转换为 char*。这将需要一个额外的 const_cast

关于c++ - 指向空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3707872/

相关文章:

c++ - 程序删除其他用户的文件 - 权限被拒绝

c++ - 私有(private)元素错误

c - 指向整数的指针数组?或指向整数数组的指针?

c++ - 我在一些指针上遇到了问题,调试结束时访问位置失败

c++ - 将 STL 字符串和 STL vector 转换为 void*?

c - 是否在 C 中实现了 void 安全?

c++ - Cython 包装 operator<< 来自多个命名空间

java - 在 C++ 中,我们可以向上转换一个数组,然后尝试将另一个子类型放入其中(受到 Java ArrayStoreException 的启发)吗?

c++ - STL::带有原始指针的迭代器

java - void方法中使用的void方法的组成? ( java )