每次我尝试编译我的代码时都会出现错误:
cannot convert parameter 1 from 'int *' to 'int *&'
测试代码如下所示:
void set (int *&val){
*val = 10;
}
int main(){
int myVal;
int *pMyVal = new int;
set(&myVal); // <- this causes trouble
set(pMyVal); // <- however, this doesn't
}
我想一次调用该函数,而不是在某处创建一个指针来传递它。由于指针没有构造函数,因此无法完成类似的操作:set(int*(&myVal));
有没有其他方法可以通过引用传递指针而不需要创建临时变量?
编辑:顺便说一句,我知道为什么代码无法编译(我只是传递可能是 int 而不是实际指针的地址)。问题是它还能如何完成。
最佳答案
对非常量的引用不能绑定(bind)到右值。 &
运算符的结果是一个右值。看看the difference between lvalues and rvalues或阅读 a good C++ book .
此外,在您的上下文中,您不需要通过引用传递。以下也可以:
void set (int *val){
*val = 10;
}
如果您要执行此类操作,则需要引用资料;
void set (int*& val){
val = new int; //notice, you change the value of val, not *val
*val = 10;
}
关于c++ - 参数通过引用传递给指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7308384/