为何C++中传指针变量可编译,直接传&it却报类型转换错误?
为什么直接传递
&it给Directory*&参数会编译失败,而先赋值给指针变量就可行? 核心原因:非const左值引用无法绑定右值
你的函数签名是findDirToDelete(Directory*&),这里的参数是非const的左值引用——它要求绑定的是一个有持久内存地址的、可修改的左值(也就是有名字的变量)。
两种写法的本质区别
- 可行的写法:
Directory* ptr = ⁢ findDirToDelete(ptr);
这里ptr是一个有名字的指针变量,属于左值,它在内存中有固定的存储位置,非const左值引用可以正常绑定到它,所以编译没问题。
- 编译失败的写法:
findDirToDelete(&it);
&it是一个临时计算出来的指针值(属于右值),它没有自己的名字,也没有持久的内存空间——只是表达式计算过程中产生的临时结果。C++不允许把非const左值引用绑定到这种临时右值,因为修改临时值没有实际意义,还可能导致意外错误,所以编译器直接报错。
解决办法(如果需要支持直接传临时指针)
如果你的函数不需要修改传入的指针本身(只是用指针访问对象),可以把参数改成以下两种之一:
- 传值:
findDirToDelete(Directory*)——临时指针值可以直接传递给值参数 - const左值引用:
findDirToDelete(const Directory*&)——const引用允许绑定右值
内容的提问来源于stack exchange,提问作者StefanoSavarino
相关产品推荐
相关产品推荐

