函数声明中的`*&`是什么意思? [英] What does `*&` in a function declaration mean?

查看:423
本文介绍了函数声明中的`*&`是什么意思?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我写了一个沿着这一行的函数:

  void myFunc(myStruct *& out){
out = new myStruct;
out-> field1 = 1;
out-> field2 = 2;
}

现在在调用函数中,我可能会这样写:

  myStruct * data; 
myFunc(data);

将填充 data 。如果我在声明中省略& ,这将不起作用。 (或者,它只在本地函数中工作,但不会更改调用方中的任何内容)



有人可以向我解释这个 *& '实际上是什么?

解决方案

& C ++变量声明中的符号表示它是参考



它恰好是一个指针的引用,它解释了你看到的语义;被调用函数可以改变调用上下文中的指针,因为它具有对它的引用。



因此,为了重申,这里的操作符号不是 *& ,这种组合本身并不意味着很多。 * 是类型 myStruct * 的一部分,即指向 myStruct ,并且& 使它成为引用,所以你读它为 out 是对 myStruct 的指针的引用。



原来的程序员在我看来可以帮助写为:

  void myFunc(myStruct *& out)
pre>

甚至(不是我的个人风格,但当然仍然有效):

 code> void myFunc(myStruct *& out)

当然,关于风格的意见。 :)


I wrote a function along the lines of this:

void myFunc(myStruct *&out) {
    out = new myStruct;
    out->field1 = 1;
    out->field2 = 2;
}

Now in a calling function, I might write something like this:

myStruct *data;
myFunc(data);

which will fill all the fields in data. If I omit the '&' in the declaration, this will not work. (Or rather, it will work only locally in the function but won't change anything in the caller)

Could someone explain to me what this '*&' actually does? It looks weird and I just can't make much sense of it.

解决方案

The & symbol in a C++ variable declaration means it's a reference.

It happens to be a reference to a pointer, which explains the semantics you're seeing; the called function can change the pointer in the calling context, since it has a reference to it.

So, to reiterate, the "operative symbol" here is not *&, that combination in itself doesn't mean a whole lot. The * is part of the type myStruct *, i.e. "pointer to myStruct", and the & makes it a reference, so you'd read it as "out is a reference to a pointer to myStruct".

The original programmer could have helped, in my opinion, by writing it as:

void myFunc(myStruct * &out)

or even (not my personal style, but of course still valid):

void myFunc(myStruct* &out)

Of course, there are many other opinions about style. :)

这篇关于函数声明中的`*&`是什么意思?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆