C++中"*&"的含义是什么?

cop*_*nja 0 c++

我正在查看ACE框架的手册并且遇到了这个声明

int ACE_Stream<>::get   (ACE_Message_Block *&   mb, ACE_Time_Value * timeout = 0)
Run Code Online (Sandbox Code Playgroud)

我无法理解它*&代表什么.我知道*是指针和&是参考.任何人都可以解释这个声明的含义是什么.

提前致谢

所以@NPE表示*&对指针的更改进行传播.但要理解我只是写下了一些共享它的代码,以便它可以帮助其他人正确理解这一点

#include <iostream>

using namespace std;

class DoSomething
{
public:
  int n;
  DoSomething(int i){
    n = i;
  }
  virtual ~DoSomething();
};

DoSomething::~DoSomething()
{

}

int dosomething(DoSomething * a)
{
  cout << "Got value from caller: (in dosomething) = " << a << endl;
  a = new DoSomething(25);

  return 0;
}

int dosomethingElse(DoSomething *& a)
{
  cout << "Got value from caller: (in dosomethingElse) = " << a << endl;
  a = new DoSomething(15);
  return 0;
}

int main(int argc, char *argv[])
{
  DoSomething *d = new DoSomething(10);

  cout << "Pointer to DoSomething: " << d << endl;

  dosomething(d);
  cout << "After dosomething value of d: " << d << endl << endl;

  dosomethingElse(d);
  cout << "After dosomethingElse value of d: " << d << endl << endl;  

  delete d;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以@NPE这里说的就是这个

Pointer to DoSomething: 0x955f008
Got value from caller: (in dosomething) = 0x955f008
After dosomething value of d: 0x955f008

Got value from caller: (in dosomethingElse) = 0x955f008
After dosomethingElse value of d: 0x955f028
Run Code Online (Sandbox Code Playgroud)

所以,如果我在函数内部创建一个新实例,它只会在我使用时传播*&而不仅仅是传播*

谢谢你们每个人的答案.

小智 6

我知道*是指针和&参考.

正确.所以你在这里有一个指针,通过引用传递.

  • 而这正是,为什么我认为这是一个耻辱,标准没有为声明周围的whitechars指定规则 - 每个人都有他自己的喜欢这个问题;)我宁愿坚持*的类型的原因是因为我开始在Delphi编程,其中指向类型的指针本身就是一种类型(例如,PInteger或^整数).这就是为什么我更喜欢`type*&name`而不是`type*&name`.但这些是偏好:一个在另一个上面.就个人而言,我通常会编写类似`type*&name`的代码. (2认同)