Jas*_*son 9 c++ syntax pointers
我试图将我的头脑包围起来void*,以及它的适当用途,如果有任何潜在的滥用,我应该知道.(意思是冷静,没有错).
我不明白如何以及为什么使用void*.如果我理解,我需要将当前指针强制转换为a void*,然后在我想使用它时将其转换回原始指针...?
为什么这有益?不要让事情变得通用,因为我需要知道void*传入什么类型的演员...
任何人都可以帮助我理解 void*
Jer*_*fin 13
在C中,void *用于创建泛型集合是相当常见的.例如,如果您想要一个通用链表,您可能会写如下:
typedef struct node  { 
    void *data;
    struct node *next;
} node;
然后,您可以创建一个链接列表foo,另一个链接列表bar,等等.
但是,在C++中,这很少有用.在典型情况下,您需要将等效代码编写为模板:
template <typename T>
class node { 
     T data;
     node *next;
};
使用较旧的编译器,您可以通过组合这两种技术来减少生成的代码.在这种情况下,你会使用指针的集合作废,存储数据,然后有一个刚刚处理铸造模板前端T *以void *当您从存储的数据,并返回void *到T *当您检索的数据.
编译器/链接器的改进使得这种技术(几乎?)完全过时了.较旧的编译器会为您实例化模板的每种类型生成单独的代码,即使实例化类型无关紧要.当前的编译器(或者工具链,无论如何 - 相当多的是由链接器真正处理的)识别相同的代码序列,并自动将它们合并在一起.
结论:除非您需要C兼容性,或者您正在编写替换operator new/ operator delete,否则使用void *编写良好的C++通常非常少见.
| 归档时间: | 
 | 
| 查看次数: | 10859 次 | 
| 最近记录: |