我正在阅读Bjarne Stroustrup C ++常见问题解答站点。我在哪里看到以下行。
- 避免使用
void*
(将其保留在低级函数和数据结构中) 如果您确实需要它们并提供类型安全的接口,通常 模板,提供给您的用户)
为什么void*
在C ++中被认为是不安全的?
答案 0 :(得分:4)
为什么void *在C ++中被认为是不安全的?
因为void*
代表没有任何类型信息的内存地址。编译器无法知道该地址上的原始内存所使用的数据类型结构。
在那种情况下,程序员负责正确地自己对内存布局进行解密,这是一个容易出错的过程,程序员需要确切地知道他们在做什么。
从某种意义上说,你一直在引用(强调我的意思)
- 避免使用
void*
(如果确实需要它们,请将它们保留在低级函数和数据结构中,并向您提供 类型安全的 接口,通常是模板)用户)
这与void*
失去类型安全性有关。
总结以上引用:
首选使用c ++模板,因为原始类型信息不会像使用void*
作为参数的泛型 c样式函数那样丢失。
答案 1 :(得分:0)
在C中提供“通用”功能或数据结构的标准方法是使用void*
作为数据类型,以便可以将任何分配的内存放入其中。不幸的结果是允许将不同类型的数据放入同一容器中。在C ++中,这可以通过提供“模板”来解决,该模板可在编译时创建函数和类/结构的类型安全实例,从而确保类型正确。