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);