我想编写一个修改任何类型的给定指针的函数;因此我声明我的函数接受 a void*&
,依赖于从任何指针到void*
. 但是下面的代码拒绝编译,说它不能转换int*
为void*&
.
void f(void*& x)
{
x = 0;
}
int main() {
int* a = new int;
f(a);
delete a;
return 0;
}
请注意,如果 f 被声明为接受 a int*&
(但随后失去其普遍性)或 f 被声明为接受 a void*
(但 f 只能在本地修改其参数),则它工作正常。
因此,“任何T*
到void*
”隐式转换规则独立工作,“T
到T&
隐式转换规则”工作,但不能同时工作?为什么会这样?我在这里做错了什么?
(我知道我可以为 f 使用模板函数,这主要是出于好奇)。