参数类型void*&含义是什么?它的用途是什么?
-
26-09-2019 - |
题
我正在查看用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;
}
不隶属于 StackOverflow