我按照这个思路写了一个函数:
void myFunc(myStruct *&out) {
out = new myStruct;
out->field1 = 1;
out->field2 = 2;
}
现在在调用函数中,我可能会这样写:
myStruct *data;
myFunc(data);
这将填充 data
中的所有字段。如果我在声明中省略了 '&
',这将不起作用。 (或者更确切地说,它只会在函数中本地工作,但不会改变调用者中的任何内容)
有人可以向我解释一下这个 '*&
' 的实际作用吗?它看起来很奇怪,我无法理解它。
最佳答案
C++ 变量声明中的 & 符号表示它是 reference .
它恰好是对指针的引用,它解释了您所看到的语义;被调用函数可以改变调用上下文中的指针,因为它有一个对它的引用。
所以,重申一下,这里的“有效符号”不是 *&
,这种组合本身并不意味着很多。 *
是 myStruct *
类型的一部分,即“指向 myStruct
的指针”,而 &
使它成为引用,因此您可以将其读作“out
是对指向 myStruct
的指针的引用”。
在我看来,最初的程序员可以将其写成:
void myFunc(myStruct * &out)
甚至(不是我个人的风格,但当然仍然有效):
void myFunc(myStruct* &out)
当然,关于风格还有很多其他的看法。 :)
关于c++ - 函数声明中的 `*&` 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1426986/