什么参数类型void *&意思是什么?

时间:2010-11-20 19:55:54

标签: c++ pass-by-reference void-pointers boinc

我正在查看用C ++编写的API,我对以下参数类型的含义感到困惑:

void*& data

这是否意味着用户会传入对void指针的引用?如果这是真的,有什么意义呢?我的意思是void *已经是间接的,所以你为什么要再次重定向呢?

3 个答案:

答案 0 :(得分:7)

void *表示在C ++中传递指针,这意味着你传入一个指针,但它实际上是指针的副本。如果你在函数中修改了这个指针,比如更改它的地址,它就不会反映在你传入的指针中。

将它与传递引用相结合,void *&表示您正在将原始指针的别名传递给此函数。如果您修改它,比如更改其地址,它将反映在原始指针中。

答案 1 :(得分:2)

很难说没有看到它的使用,但你指出参考是间接的水平。如果它是一个指针指针,你会发现它很奇怪吗?这些很常见 - 事实上,当你接受命令行参数并获得指向char指针的指针时,你会处理它们。另一个例子是如果您使用存储桶制作哈希映射,并希望能够将指针返回到启动存储桶的指针。

关键是有时你需要多个间接层。确实,混合指针和引用可能很古怪,但有充分的理由。一个常见原因是需要C ++代码与C apis交互。很多POSIX系统调用需要传入然后更改的void指针,因此有问题的C ++函数可能充当它的包装。

答案 2 :(得分:1)

但要小心不要返回对local *的引用。 不要做这样的事情:

void*& f()
{
 int* a=new int(10);
 void* x=(void*)a;
 return x;
}