C++ 使用运算符的地址匹配指针参数类型?

C++ 使用运算符的地址匹配指针参数类型?,c++,pointers,C++,Pointers,我有一些这样的代码: X& x = getXByRef(); myFunc(&x); 致电: void myFunc(X*& x){ // ... } 其中getXByRef(): 我想我可以这样做,因为我使用了操作符的地址来匹配指针类型。但是,它会生成编译器警告,指出堆栈变量类型与参数类型不匹配 我的误解是什么 您有接收指针引用的函数,但您正在&x中创建临时指针。实际上,它不应该是警告,而是错误(在gcc/clang中,但在MSVC中不是)。 解决方案很简

我有一些这样的代码:

X& x = getXByRef();

myFunc(&x);
致电:

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

我想我可以这样做,因为我使用了操作符的地址来匹配指针类型。但是,它会生成编译器警告,指出堆栈变量类型与参数类型不匹配


我的误解是什么

您有接收指针引用的函数,但您正在
&x
中创建临时指针。实际上,它不应该是警告,而是错误(在gcc/clang中,但在MSVC中不是)。 解决方案很简单:

X* ptr = &x;
myFunc(ptr);

但实际上您需要指针吗?

myFunc
需要一个指向
X
指针的(非常量)引用作为参数

您正在传递
&x
,它是指向
x
的指针。但它是临时的,不能通过引用传递


myFunc
接受
X*
(指向
X
)或
X*常量&
(指向
X
指针的常量引用)。或者将
&x
存储在变量中,然后再将其作为参数传递给函数。

将该警告粘贴到其完整形式。此外,如果您控制了
myFunc
,则该签名看起来很可怕。
\ux
是全局变量吗?为什么?我这里不需要指针,但函数myFunc()也用于我必须传递指针的地方。该函数用于一些代码中,这些代码有大约3-4个嵌套级别的函数,其中我当前传递了一个常量X&,我真的必须将所有这些参数类型更改为使用X*?@user997112它实际上取决于函数的实际功能。
X* ptr = &x;
myFunc(ptr);