我正在查看用 C++ 编写的 API,我对以下参数类型的含义感到困惑:
void*&* data
这是否意味着用户将传递对 void 指针的引用?如果这是真的,那还有什么意义呢?我的意思是 void* 已经是间接的了,所以为什么你想再次重定向它呢?
void *
在C++中是pass-by-pointer的意思,意思是传入一个指针,但实际上是指针的一个副本。如果您在函数中修改了此指针,例如更改其地址,则它不会反映在您传入的指针中。
将其与按引用传递相结合,
void *&
意味着您正在将原始指针的别名传递给此函数。如果您修改了它,例如更改其地址,它将反映在原始指针中。
在没有看到它的用途的情况下很难说,但你指出引用是一种间接级别。如果它是一个指向指针的指针,你会觉得奇怪吗?这些很常见 - 事实上,您在接受命令行参数并获取指向 char 指针的指针时处理它们。另一个例子是,如果您正在使用存储桶创建哈希映射,并且希望能够将指针返回到启动存储桶的指针。
关键是有时您需要多层间接。确实,混合指针和引用可能很奇怪,但这是有充分理由的。一个常见的原因是 C++ 代码需要与 C api 交互。许多 POSIX 系统调用需要传入然后更改的 void 指针,因此相关的 C++ 函数可能充当该指针的包装器。
但要小心不要返回对局部 void* 的引用。 不要做这样的事情:
void*& f()
{
int* a=new int(10);
void* x=(void*)a;
return x;
}