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

void*& data

这是否意味着用户将传递对Void指针的引用?如果这是真的,这是什么重点?我的意思是Void*已经是间接的,所以您为什么要再次将其重定向?

有帮助吗?

解决方案

很难看不到它的使用,但是您指出参考是间接水平。如果是指针的指针,您会觉得很奇怪吗?这些非常普遍 - 实际上,您在接受命令行论证并将指针带到字符指针时与他们打交道。另一个示例是,如果您使用存储桶制作哈希地图,并且希望能够将指针返回到启动存储桶的指针。

关键是有时您需要多个间接级别。的确,混合指针和参考可能是古怪的,但是有充分的理由。一个常见的原因是需要C ++代码与C API交互。许多POSIX系统调用都需要通过空隙指针,然后再通过然后更改,因此所讨论的C ++功能可能是围绕该功能的包装器。

其他提示

void * 表示C ++中的逐项通过,这意味着您可以通过指针传递,但实际上是指针的副本。如果您在功能中修改了此指针,例如更改其地址,则不会反映在您传递的指针中。

将其与参考的通过相结合, void *& 表示您正在传递原始指针的别名。如果您对其进行了修改,就像更改其地址一样,它将反映在原始指针中。

但是请注意不要返回局部void*。不要这样做:

void*& f()
{
 int* a=new int(10);
 void* x=(void*)a;
 return x;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top