函数参数类型后跟*&

时间:2011-02-20 00:32:08

标签: c++ parameters casting

我有一些由其他人编写的代码,其中一些函数采用其数据类型后跟*&的参数。我习惯于采取一种或另一种方式,例如:采取“双*”或“双&”但不是两个。它会认为他们会取消。

这是一个例子,这些都来自他们认为有用的代码:

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

的函数
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. *&amp ;?的目的是什么?即,与*或&有什么不同?他们自己为什么不取消自己呢?那个函数foo期望什么呢?一个地址?一个值?地址的地址?这令人困惑。

  2. 是否只是将“unsigned int *”转换为“const unsigned int *&”好的还是我需要做别的事?

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

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

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

    一如既往地谢谢。

3 个答案:

答案 0 :(得分:3)

对于类型T,T *&表示“对指向T的指针的引用”。调用函数应该传递指向T的指针。对于const修饰符,尝试foo((const unsigned int *)pBuff);或者声明pBuff是一个指向const int的指针。

答案 1 :(得分:1)

好吧,我尝试转换为(const unsigned int *),但这不起作用(不会构建)。最后,我必须在原始帖子的foo函数示例中完全转换为(const unsigned int *&)。希望这可以帮助。谢谢。

顺便说一下,我之所以没有从我的主代码中开始制作pbuff const的原因是它稍后传递给另一个函数,它会修改它,所以我认为它不会起作用声明时使它成为const。

答案 2 :(得分:0)

  1. 指针和引用实际上是不同的,但使用对指针的引用是没用的。
  2. 这不行,pbuff不是const,这就是你的代码无法编译的原因。使用const pbuff或更改你的原型,像这样的铸造真的很难看