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