void *
在C中使用有许多缺点(与内存相关,类型相关,效率明智......).尽管如此,我们还是使用它们来提供灵活性.
列出使用的缺点/缺点void *
(以及C中的首选解决方案 - 如果可能的话).
编辑: 请通过以下链接:http: //attractivechaos.wordpress.com/2008/10/02/using-void-in-generic-c-programming-may-be-inefficient/
void指针没有效率问题.void指针的唯一限制是:
出于显而易见的原因,你无法取消引用void指针
sizeof(void)
是非法的
你不能在void指针上执行指针算术
但是GCC假设它sizeof(void)
是1并允许指针算术在void指针上 - 见这里
我不同意这个问题的前提.我们在C中使用void*,因为它是获得多态的唯一方法.示例:库函数qsort和bsearch.只有一个缺点,即基于void*的多态性是不安全的:一旦你将指针强制转换为void*,就没有什么可以阻止你错误地将void*转换为错误的指针类型.我的学生经常犯这个错误.
可能存在效率成本,因为有时需要分配堆空间以使用多态数据结构.
任何想要看到使用void*的多态数据结构的优点和权衡的人都应该得到Dave Hanson的书C接口和实现的副本