const void*提供什么价值超过void*?

Wil*_*mKF 7 c++ const void-pointers const-cast reinterpret-cast

在C++中,const void *对于函数的参数类型使用a是否有任何价值void *?由于a void *是不透明的,除了用户之外是否有任何修改的风险reinterpret_cast,在这种情况下,他们同样可以const_cast在a上进行修改const void *,从而真正购买任何东西吗?我问,因为我正在使用一个实用程序模板类来提供共享指针,它提供了一个专门化void以避免void &问题,但没有提供专业化const void,因此我想知道这只是一个疏忽还是永远不需要它?

Fre*_*Foo 9

它提供了与const其他指针类型相同的好处:除非const明确地抛弃-ness ,否则无法修改指向的内容.在接口中,const void*是客户端代码的标志,无论您传入的是什么,都可以读取但不能写入.例如,std::memcpy被宣布为

void *memcpy(void *dest, const void *src, std::size_t count);
Run Code Online (Sandbox Code Playgroud)

它表示它将读取src和写入dest.当然,如果它真的是用C++实现的(可能但不太可能),它必须将两个指针都转换为其他类型.

如果你觉得这"不会给你带来什么",那么const关键词本身显然没有任何价值.