我正在查看一个用 C++ 编写的 API,但我对以下参数类型的含义感到困惑:
void*& data
这是否意味着用户会传入对 void 指针的引用?如果这是真的,那有什么意义呢?我的意思是 void* 已经间接了,那么你为什么还要重新重定向它呢?
我正在查看一个用 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;
}