我正在查看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
我知道
*是指针和&参考.
正确.所以你在这里有一个指针,通过引用传递.
| 归档时间: |
|
| 查看次数: |
159 次 |
| 最近记录: |