我有一些像这样的代码:
X& x = getXByRef();
myFunc(&x);
致电:
void myFunc(X*& x){
// ...
}
其中getXByRef()
:
X& getX(){
return _x;
}
我认为我可以做,因为我使用了address-of运算符来匹配指针类型。但是它会生成编译器警告,说堆栈变量类型与参数类型不匹配。
我的误会是什么?
答案 0 :(得分:1)
你有函数,它接收对指针的引用,但你在&x
创建临时指针。实际上它不应该是警告,而是错误(并且在gcc / clang中,但在MSVC中不是)。
解决方案很简单:
X* ptr = &x;
myFunc(ptr);
但实际上你需要指针吗?
答案 1 :(得分:1)
myFunc
期望对X
指针的(非常量)引用作为参数。
您正在传递&x
,这是指向X
的指针。但这是暂时的,不能通过引用传递。
让myFunc
接受X*
(指向X
的指针)或X* const &
(指向X
指针的const引用)。或者将&x
存储在变量中,然后将其作为参数传递给函数。