使用address-of运算符来匹配指针参数类型?

时间:2015-11-16 12:06:55

标签: c++ pointers

我有一些像这样的代码:

X& x = getXByRef();

myFunc(&x);

致电:

void myFunc(X*& x){
    // ...
}

其中getXByRef()

X& getX(){
    return _x;
}

我认为我可以做,因为我使用了address-of运算符来匹配指针类型。但是它会生成编译器警告,说堆栈变量类型与参数类型不匹配。

我的误会是什么?

2 个答案:

答案 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存储在变量中,然后将其作为参数传递给函数。