我想编写一个修改任何类型的给定指针的函数;因此我声明我的函数接受 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 使用模板函数,这主要是出于好奇)。