gpt4 book ai didi

c++ - 函数参数类型后跟 *&

转载 作者:行者123 更新时间:2023-11-30 02:09:51 33 4
gpt4 key购买 nike

我有一些其他人编写的代码,其中一些函数采用其数据类型后跟 *& 的参数。我习惯于采取其中之一的功能,例如使用“double *”或“double &”,但不能同时使用。它本来以为他们会取消。

这是一个例子,这全部来自他们的代码,据说可以工作:

在头文件中有一个函数声明为:

void someClass::foo(const unsigned int*& ubuff);

然后在我的主文件中,有一个指向一些声明和初始化为的 UINT 的指针:

unsigned int* pbuff = new UINT[n];

然后,函数 someClass::foo 被调用为:

foo(pbuff);

当我编译时,出现错误“无法将参数 1 从‘unsigned int *’转换为‘const unsigned int *&’”。如果我将我的函数调用更改为以下内容,它编译正常:

foo((const unsigned int *&)(pbuff));

所以,我的问题是:

  1. *& 的目的是什么?也就是说,这与 * 或 & 本身有何不同,为什么它们不直接抵消掉自己? foo 期望的功能是什么?一个地址?一个值?地址的地址?令人困惑。

  2. 简单地将“unsigned int*”转换为“const unsigned int*&”的解决方法是否可行,还是我需要做其他事情?

只是另一个简单的例子,这完全来自其他人分发的 cpp 文件,所以我假设这是为他们编译的。他们有一个函数调用

klabels = new int[sz];
EnforceLabelConnectivity(klabels, m_width, m_height, nlabels, numlabels, double(sz)/double(STEP*STEP));

当我尝试构建时,出现错误“‘SLIC::EnforceLabelConnectivity’:无法将参数 1 从‘int *’转换为‘const int *&’”。

一如既往的感谢。

最佳答案

对于类型 T,T *& 表示“对指向 T 的指针的引用”。调用函数应该传递一个指向 T 的指针。至于 const 修饰符,请尝试 foo((const unsigned int *)pBuff); 否则将 pBuff 声明为指向 const int 的指针以开始与。

关于c++ - 函数参数类型后跟 *&,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5054484/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com